天天看點

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

從來沒有自己配置過,但是好想自己啃啃它

所有代碼都在github

目錄結構

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

配置檔案都寫在config底下了

運作

webpack --config=config/webpack_3.config.js
           

各工具版本

  • webpack 4.42.0
  • node 10.16.0
  • npm 6.9.0

webpack_1

主要是測試webpack的預設輸入輸出功能

entry

屬性不設定的話,webpack啟動時會去尋找./src/index.js。如果沒有此檔案會報錯

【有一點困惑,預設值是./src/index,但是如圖我的src/index和webpack_1.config.js并不是同一級,但是打包還是會打包成功生成dist檔案夾,dist跟src是一級,我把src移到webpack_1 folder裡就失敗】

ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/lorry/workspace/up2/webpack'
           

output

不設定的話就會自動建立dist folder并輸出打包結果

webpack_2

測試多入口和多出口的情況

entry可以是string、array、object類型,在不設定output屬性時

  • entry屬性值是string、array時,打包并生成dist/main.js
  • entry屬性值是object時,不管有沒有設定output屬性都會生成相同數量的打包後的檔案
module.exports = {
    entry: {
        test1: './webpack_2/main.js',
        test2: './webpack_2/main1.js',
    },
    output: {
        path: `${absoluteRoute}/dist`,  // 必須是絕對路徑
        filename: '[name].js'
    }
}

// 生成
webpack_2/dist/test1.js  webpack_2/dist/test2.js

           
  • [id]chunk id
  • [name]是entry的key值
  • [hash] 本次建構過程 唯一生成的hash
  • [chunkhash] 基于每個chunk内容生成的hash

[hash]

如下,如果filename: ‘[name][hash].js’

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

[chunkhash]

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

webpack_3

主要用來測試以下loader以及常用屬性、typescript

  • style-loader 通過import/require引用的css檔案以style标簽的方式打包到html檔案裡
  • css-loader 可以在js檔案中引入css檔案
  • file-loader 打封包件并輸入到指定folder
  • url-loader 功能類似于file-loader。但是但是在檔案大小(機關 byte)低于指定的限制時,可以傳回一個 DataURL。大于的話預設使用file-loader處理;它不會将資源打包到output folder

使用url-loader處理後使用

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

使用file-loader

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

測試了一下url-loader的功能

有兩張圖a.png【36kb === 36864byte】 b.jpeg【83kb === 84992byte】。

loader配置如下

{
                test: /\.(png|jpe?g)$/,
                use: [{
                    loader: 'url-loader',
                    options: {
                        name: '[name].[ext]', // 可提供function
                        outputPath: 'assets/',
                        limit: 36864, // byte
                    }
                }]
}
           

按照文檔說的圖a應該是使用url-loader處理,b使用file-loader處理

看一下請求,符合預期

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

oneOf

可實作對同一類型檔案使用不同loader處理,當規則比對時使用指定loader,不比對時使用其他規則

css

background: url('./assets/a.png?a') no-repeat center center;
background: url('./assets/b.jpeg') no-repeat center center;
           

loader配置

{
                test: /\.(png|jpe?g)$/,
                oneOf: [{
                    resourceQuery: /a/,   // 
                    use: 'url-loader',
                },{
                    use: [{
                        loader: 'file-loader',
                        options: {
                            name: '[name].[ext]', // 可提供function
                            outputPath: 'assets/',
                        }
                    }]
                }]
}
           

根據配置,圖a采用url-loader,b使用file-loader

webpack小白筆記webpack_1webpack_2webpack_3webpack_4

處理typescript

安裝ts-loader typescript

plugins待整理~~~~

/------------接上文--------------/

plugins

webpack_4

typescript的webpack配置