Grunt和Gulp的工作方式是:在一個配置文件中,指明對某些文件進行類似編譯,組合,壓縮等任務的具體步驟,這個工具之后可以自動替你完成這些任務。
Webpack的工作方式是:把你的項目當做一個整體,通過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到你的項目的所有依賴文件,使用loaders處理它們,最后打包為一個瀏覽器可識別的JavaScript文件。
下面我們新建一個項目來詳細描述一下使用webpack打包項目的過程:
1.安裝好npm,這個不再復述,然后在一個目錄下執行 npm init,這樣就會初始化一個項目包,里面就有了一個package.json的文件,這個文件想必大家都有所了解
2.然后安裝一下webpack,既然我們想打包,就要把webpack這個工具安裝好,安裝方式有兩種,一個是全局安裝一個是安裝在項目中,在項目的package.json目錄下執行的命令分別是npm install -g webpack 和 npm install --save-dev webpack,在這里我們安裝在項目里面,使用第二種安裝方式
3.安裝完成之后我們能看到項目目錄下有一個node_module的文件夾,然后我們就可以寫自己的項目了,我們首先建立一個app和public的文件夾,在app中新建兩個文件,分別是test.js和main.js,在pulic中新建一個index.html文件,這樣我們的基本項目雛形就產生了
4.我們在index.html中寫入一下片段:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Webpack Project</title> </head> <body> <div id='root'> </div> <script src="bundle.js"></script> </body> </html>
5.我們在test.js中寫入這樣一個除了方法:
//test.js module.exports = function() { var test= document.createElement('div'); test.textContent = "Hi there and testing!"; return test; };
6.我們在main.js中把test.js的方法導入進來:
//main.js var test= require('./test.js'); document.getElementById('root').appendChild(test());
7.下面我們就可以使用webpack工具進行打包了,在項目的根目錄,也就是包含node_module的目錄下執行下面這個命令node_modules/.bin/webpack app/main.js public/bundle.js,這條命令的是使用webpack把打包后的文件命名為bundle.js放在public文件夾下,其中app/main,js是項目的入口。我們能看到終端上會打印出包含這樣的log
8.這就說明我們的打包工作完成了,然后我們打開index.html文件就能看到我們輸入的內容:Hi there and testing!
9.這樣要配置項目入口,又要配置輸出文件名之類的東西,在命令行輸入比較麻煩,我們可以使用文件配置的方式,在項目的根目錄中新建一個webpack.congfig.js的文件,把下面這些內容寫入進去
module.exports = { entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件 output: { path: __dirname + "/public",//打包后的文件存放的地方 filename: "bundle.js"//打包后輸出文件的文件名 } }
這樣我們就可以直接使用node_modules/.bin/webpack直接進行打包操作了
10.如果我們不想使用node_modules/.bin/webpack這樣的命令,習慣使用npm xxx之類的,我們在我們的package.json中設置一下啟動命令即可:
"scripts": { "webpack": "webpack" //配置的地方就是這里啦 }
然后我們直接執行npm run webpack同樣可以執行打包任務
11.接下來我們介紹,如何直接引入json類型的文件,這里我們使用loaders模塊,先說一下應用場景吧。我們現在有一個json文件,我們想把它導入到模塊中,然后讀取里面的信息,下面我們的文件目錄是這樣的:
12.如果我們想在任意一個模塊,如test.js或者main.js中導入這個json文件,比如,我們的test.json文件中有這樣一個內容
//test.json { "Test": "Hi there and geetings from JSON!" }
我們想在test.js使用這樣Test字段
var test = require('./test.json'); module.exports = function() { var geet = document.createElement('div'); geet.textContent = test.greetText; return geet; };
我們就要引入json-loader,具體的辦法是:在根目錄下執行
//安裝可以裝換JSON的loader
npm install --save-dev json-loader
然后把我們的webpack.config.js配置成下面這樣
module.exports = { entry: __dirname + "/app/main.js", output: { path: __dirname + "/public", filename: "bundle.js" }, module: {//在配置文件里添加JSON loader loaders: [ { test: /\.json$/, use: "json-loader" } ] } }
最后我們執行一下npm run webpack,打包完成,打開index.html頁面就會顯示test.json里面的Hi there and geetings from JSON!這個內容
13.如果我們想把css樣式也一起打包,就npm install --save-dev style-loader css-loader,然后在webpack.config.js進行相應的配置就行了,這樣是把js和css打包成一個文件,也可以把他們分開打包。