1. 程式人生 > >webpack安裝配置詳解

webpack安裝配置詳解

去年寫過一篇webpack協助React js工作的簡單例子。但是webpack的功能非常強大,並不是專門服務於React js的。之前對webpack理解很模糊,只能簡單使用。最近參考其他一些文件教程,重新學習瞭解了一下webpack的功效。

Webpack簡介

Webpack可以看做是模組打包機:它做的事情是,分析你的專案結構,找到JavaScript模組以及其他的一些瀏覽器不能直接執行的擴充套件語言(Scss,TypeScript, React js等),並將其打包為合適的格式以供瀏覽器使用。

在webpack中,一切資源都被看做是模組,如js,css,圖片,json等等等等。在webpack專案中,js模組可以引進這些模組來使用。

官方圖:


 

Webpack的使用

1,安裝

webpack安裝的前提是包含NodeJS環境。下面假設機器上已經安裝了node環境。

在任何一個自己喜歡的路徑下建立新的空資料夾,作為webpack的練習資料夾,終端進入該資料夾後執行下面命令安裝webpack

//全域性安裝
npm install webpack
//安裝到專案目錄
npm install --save-dev webpack

2,建立目錄結構

終端執行下面命令建立package.json檔案,裡面包含專案依賴的模組,自定義的指令碼任務等等。執行命令時將會提示填寫一些專案資訊,如實填寫或者一直回車跳過就可以。

npm init

 舉一個最簡單的webpack打包例子

在該資料夾下直接建立三個檔案,分別為main.js,test.js,main.html

其中test.js的程式碼如下,建立一個div,設定文字為Hello, Webpack,並用module.exports匯出。

var test = document.createElement('div');
test.textContent = 'Hello, Webpack';
module.exports = test;

 main.js程式碼如下,將test.js中匯出的div匯入,然後將它放到id為content的元素中。

var test = require('./test.js');
document.getElementById('content').appendChild(test);

之後在終端執行命令,將main.js作為入口檔案,webpack將自動識別main.js所依賴的其他檔案。然後再指定一個出口檔案bundle.js

webpack main.js bundle.js

  命令執行完之後,發現檔案目錄多出了一個bundle.js,將bundle.js引入main.html中,main.html程式碼如下,包含一個id為content的div。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="content"></div>

</body>

<script src="bundle.js"></script>

</html>

 開啟main.html,將會看到:


 
這就是webpack使用的一個最最簡單的例子。
3,Webpack的配置

每次在終端都要設定出口檔案和入口檔案非常麻煩。我們可以使用webpack的配置檔案來設定打包的出口和入口。因為上面的例子所有檔案都在根目錄下,太過簡單,所以刪掉目錄下處package.json以外的檔案,重新建立一個例子。

建立後的目錄如下,app目錄下存放入口檔案,public目錄存放唯一的html檔案


 

之後在目錄下建立名為webpack.config.js的檔案。webpack.config.js這個檔名是webpack預設的配置檔名,如果不想使用這個檔名,可以在終端執行

webpack -config [name]

 開啟webpack.config.js檔案,填入資訊

module.exports = {
    entry: __dirname + "/app/main.js",
    output: {
        path: __dirname + "/public",
        filename: "bundle.js"
    }
};

entry代表唯一的入口檔案,output設定出口檔案,path代表出口檔案路徑,filename代表出口檔名字。 

在終端執行命令,相當於之前執行的webpack [入口] [出口],只不過這樣更加簡單,不易出錯。

webpack

終端結果:


4,Loaders

webpack專案中,一切皆模組,而實現這個功能的關鍵,就是Loaders。

通過不同的Loader,webpack可以通過呼叫外部的指令碼或工具對各種各樣格式的檔案進行處理。

比如:將json轉化為js,將React轉化為js。

各種Loader都需要單獨安裝,並且需要在配置檔案中進行配置。

下面是幾個Loader例項

     1,JSON檔案

     (1)安裝轉換json的loader

npm install --save-dev json-loader

     (2)配置webpack.config.js

module.exports = {
    entry: __dirname + "/app/main.js",
    output: {
        path: __dirname + "/public",
        filename: "bundle.js"
    },
    module: {
        loaders:[
            {
                test: /\.json$/,
                loader: "json"
            }
        ]
    }
};

     其中loader的幾個引數說明:

           test:一個匹配loaders所處理的檔案的副檔名的正則表示式(必須)

           loader:loader的名稱(必須)

           include/exclude:手動新增必須處理的檔案(資料夾) 或 不需要處理的檔案(資料夾) (可選)

           query:為loaders提供額外的設定選項(可選)

     (3)在app目錄下建立json_test.js,引入根目錄的package.json

var config = require('../package.json');
console.log(config);

module.exports = function () {
    var test = document.createElement('div');
    test.textContent = JSON.stringify(config);
    return test;
};

     (4)和之前一樣,在mian.js中引入引入json_test.js中的函式,並append到id為content的元素中。

     (5)編輯index.html,建立id為content的div,在終端執行webpack,生成bundle.js,並引入到index.html中。

     (6)開啟index.html,結果如下:


      2,CSS檔案

      (1)安裝css-loader和style-loader

npm install --save-dev style-loader css-loader
   css-loader使你能夠使用類似@import和url(...)的方法實現require()的功能,style-loader將所有計算後的樣式加入頁面中。