1. 程式人生 > 實用技巧 >webpack打包樣式資源(三)

webpack打包樣式資源(三)

本篇文章主要講述webpack.config.js的自定義配置以及對樣式資源打包的處理。

首先還是建立2個資料夾src和build參考之前所說webpack打包(二)

接下來主要說一下webpack.config.js這個檔案的作用以及loader的用法(打包css、less)。

在src的同級目錄中建立一個檔案叫做webpack.config.js。

webpack.config.js的作用:指示webpack做哪些事情。一旦運行了webpack就會載入其中的配置。

所有的構建工具都是基於node.js執行,而模組化採用的是common.js。專案用的是es6,配置用的是common.js。

第一步用common.js語法暴露webpack的相關配置(五個核心)。

 1 module.exports = {
 2     entry: '',
 3     output: {
 4         filename: '',
 5         path: '',
 6     },
 7     module: {
 8         rules: [
 9             {
10                 test: / /,
11                 use: [
12 
13                 ]
14             }
15 ] 16 }, 17 plugins: [ 18 ], 19 mode: '', 20 }

entry:指示從那個檔案開始打包。

output:打包到哪裡去。

filename:檔案打包成功後的名字。

path:檔案打包後的路徑(一般用絕對路徑)。

module:loader的相關配置。

rules:執行webpack成功後會進入rules尋找loader規則。多個規則則建立多個物件。

test:類似js的正則表示式的匹配,用來匹配某個字尾名的檔案,然後對其進行解析。

use:指定使用哪些loader對其進行解析,這裡注意一點,use是一個數組,對於其中的屬性解析的時候,執行順序是從右往左,從下往上進行依次執行。也就是說從末尾開始執行解析。

plugins:對複雜業務的處理。

mode:指定以哪種模式打包。值為development/production。

好弄清這些屬性的意思我們再來寫其中的內容。假設我們現在要打包一個css檔案,上篇內容已經測試過常規方法是不能夠打包css檔案的會報錯。

/**
 * webpack 配置檔案
 * 作用:指示webpack幹那些活(當你執行webpack的時候會載入其中的配置)
 * 
 * 所有的構建工具都是基於node.js執行~模組化採用common.js。專案用的是es6,而配置用的是common.js。
 */

//nodejs語法:resolve用來拼接絕對路徑的方法
const { resolve } = require('path');

//暴露物件 寫webpack相關配置(五個核心配置)
module.exports = {
    //入口起點
    entry: './src/index.js',
    output: {
        //輸出檔名
        filename: 'built.js',
        //路徑
        //__dirname nodejs的變數,代表當前檔案的目錄的絕對路徑
        path: resolve(__dirname, 'build')
    },
    // loader的配置(翻譯)
    module: {
        rules: [
            //詳細loader

            {
            //正則匹配符合字尾的檔案遍歷rules一旦發現以css結尾的檔案進行處理
                test: /\.css$/,
                //使用哪些loader
                use: [
                    //use中的lodaer執行順序是從右到左(從下到上)依次執行
                    //建立一個style標籤,將js中的css樣式資源插入進去,新增到頁面中的head生效。
                    'style-loader',
                    //將css檔案以字串的形式變成commonjs的一個模組載入到js中,裡面的內容是樣式字串。
                    'css-loader'
                ]
            }
        ]
    },
    //plugins的配置
    plugins: [
        //詳細plugins的配置
    ],
    //模式(兩個值不能同時寫)
    mode: 'development',    //開發模式
    //mode: 'production'    //生產模式
}

這裡需要注意的一點是,在寫路徑的時候我們用到了一個新的屬性resolve,以及__dirname。

那這樣我們就可以很好理解為從src下面的index.js檔案開始打包,輸出到build檔案下的built.js。

這裡為了方便以後的使用,我們將包的管理都安裝在外面。在最外面安裝style-loader和css-loader。 --npm i style-loader css-loader -D

style-loader:建立style標籤,將js中的css樣式插入到style標籤裡。

css-loader:將css檔案以字串的形式變成commonjs的一個模組載入到js中,裡面的內容是樣式字串。

安裝成功後我們來建立一個css檔案輸入任意樣式看看html檔案有沒有根據樣式進行改變。在src資料夾中建立2個檔案分別是index.js和index.css。程式碼如下:

index.css

1 html body{
2     height: 100%;
3     background-color: pink;
4 }

index.js

1 import './index.css'

直接輸入webpack命令打包。可以看到打包成功的介面。

而且build資料夾中也多了一個built.js檔案。然後我們在該資料夾中建立一個html檔案引入這個js檔案看一下是否能夠改變html的顏色。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <title>webpack</title>
 8 </head>
 9 
10 <body>
11     <script src="./built.js"></script>
12     <h1>hello webpack</h1>
13 </body>
14 
15 </html>

執行後的頁面:

嗯沒錯變成了粉色。然後按F12看一看樣式是如何加入的。

可以看到是建立一個style標籤插入到head中。

接下來我們引入一個less檔案試一下。新建一個less檔案程式碼如下:

1 h1 {
2     color: #ffffff;
3 }

在rules中新加如一個匹配less字尾的規則以及loader:

1 {
2     test: /\.less$/,
3     use: [
4         'style-loader',
5         'css-loader',
6         'less-loader'
7     ]
8 }

less-loader:將less檔案編譯成css檔案。

在index.js中引入less檔案

1 import './index.css'
2 import './index.less'

繼續外部引入包 less-loader,這裡注意一下還要引入一個less的包。--npm i less less-loader -D

然後輸入webpack打包。

進入頁面重新整理。可以看到結果:

字型變成白色的了。然後F12看一下如何編譯less的:

也是插入style標籤轉成了css檔案輸出。

以上就是關於自定義配置以及css打包的內容。