webpack4配置乙個多頁面

2021-09-11 14:30:57 字數 4600 閱讀 7817

因為專案是用glpu搭建的工作流,在轉jenkins自動發布的時候,考慮到如果需要多頁面動態打包,需要改寫glup配置(不會glup也不想學),就將專案重構為webpack4.

掃瞄專案多頁面入口

區分生產和開發環境webpck配置

指定專案打包

使用shell指令進行打包操作

如何處理不同的模組模式

修改html如何觸發熱更新

熱更新的原理

區分生產和開發環境的懶載入

引入glob第三方外掛程式(大佬說fs模組自帶掃瞄,表示懵逼沒找到),

//獲得乙個動態的目錄

const glob = require('glob')

const path = require('path')

const htmlwebpackplugin = require('html-webpack-plugin');

//import glob from "glob"

var obj = ,

entry:

}const htmlwebpackplugindevconfig =

//$用來區別專案

glob.sync(`./src/$/**/*.html`).foreach(e =>

const chunk = arr[arr.length - 1].split('.')[0]

const filename = chunk + '.html'

//這個是入口的詳細情況,以後會用到

obj['detail'][chunk] = `)

}//entry是暴露出去的入口檔案

obj['entry'][chunk] = `$` + '/main.js'

const htmlconf =

//新建htmlwebpackplugindevconfig物件,輸出html檔案

htmlwebpackplugindevconfig.plugins.push(new htmlwebpackplugin(htmlconf))

})module.exports =

複製**

將公共配置抽離出來成為webpack.common.js

const util = require('./util')//用來獲得entry和htmlwebpackplugindevconfig

const path = require('path');

const cleanwebpackplugin = require('clean-webpack-plugin');

const extracttextplugin = require('extract-text-webpack-plugin');

const copywebpackplugin = require('copy-webpack-plugin')

module.exports = `],

),...util.htmlwebpackplugindevconfig.plugins,

new copywebpackplugin([/static`)

}]),

],module: ,, ]

}),},,]

}]

},output: `),

filename: 'js/[name].bundle[hash].js',

chunkfilename: 'help.bundle.js',

}};複製**

引入webpack-merge進行配置合併(類似於object.assign) 以dev為例,於pro相比,取消了**壓縮,增加了開發伺服器和熱更新

const path = require('path');

const webpack = require('webpack');

const copywebpackplugin = require('copy-webpack-plugin')

const merge = require('webpack-merge');

const common = require('./webpack.common.js');

module.exports = merge(common, `,

hot: true

},plugins: [

new webpack.namedmodulesplugin(),//以便更容易檢視要修補(patch)的依賴

new webpack.hotmodulereplacementplugin(),

new copywebpackplugin([/static`)

}])],

optimization: ,

module: }},

]},

});複製**

引入cross-env(這個包是能夠跨平台引入全域性物件的包,可在webpack配置和開發**中引用,我很喜歡這個外掛程式) 例如在package.json中的進行env_file進行寫死賦值(後期是通過shell命令動態賦值)

然後就可以在任何乙個地方使用process.env.env_file引用該變數

//獲得乙個動態的目錄

const glob = require('glob')

const path = require('path')

const htmlwebpackplugin = require('html-webpack-plugin');

//import glob from "glob"

var obj = ,

entry:

}const htmlwebpackplugindevconfig =

glob.sync(`./src/$/**/*.html`).foreach(e =>

const chunk = arr[arr.length - 1].split('.')[0]

const filename = chunk + '.html'

obj['detail'][chunk] = `)

}obj['entry'][chunk] = `$` + '/main.js'

const htmlconf =

htmlwebpackplugindevconfig.plugins.push(new htmlwebpackplugin(htmlconf))

})module.exports =

複製**

專案需要上jenkins自動發布,因此打包指令碼要改為動態打包

dir=$(ls -l ./src |awk '/^d/ ')

cur_date="`date +%y%m%d`"

for i in

$dir

donpx cross-env env_file=$ webpack --config ./build/webpack.pro.js

echo

"打包的資料夾是: $i"

done

cd dist

tar -zcvf ../sparrow_$.tar.gz ./*

echo

"打包完畢"

"複製**

使用shell獲得資料夾目錄,使用for迴圈動態執行webpack命令,其中npx是npm(5.2以上)自帶的乙個包,可用來執行本地指令(與package中scripts類似的作用),這裡有對 cross-env進行動態賦值的操作

原先專案使用的是src引入的第三方依賴,會將變數暴露在window下 而模組化本地打包之後,會通過require暴露乙個物件需要手動在全域性註冊一下。

手動寫乙個inject-loader,在dev環境下使用該loader,在pro就不用了

}},

,]

}複製**

//inject-loader

const path = require("path");

module.exports = function (source) .html");

};` + source;

}return source

}複製**

這裡我也迷了很久,後來才知道大致和dom事件差不多,都是採用的冒泡形式,自變更的那個檔案,冒泡到引用該檔案的最上層,vue-loader,css-loader都有對其變化進行攔截,關鍵點在module.hot.accept這個函式,一般不會出現在業務**中,會出現在loader原始碼中。 推薦乙個 大佬的github進行尾隨學習

開發環境,不需要有懶載入,懶載入只在生產上面用

//.babelrc

}}複製**

dynamic-import-node這個外掛程式是用來將import()轉化為require(),在生產環境用**分割,在開發環境使用同步引入,可以加快熱更新的速度

usebuiltins這個option可以在入口處引入babel-polyfill之後進行按需補丁

targets可以選擇編譯後的版本型別

更多env配置可檢視

啊~雖然學的很累,但是不會說學不動了,大佬是燈塔,就算我看不見,也有人會需要

demo倉庫

webpack4配置詳解

方式一 單檔案寫法 entry 方式二 多檔案寫法 entry output 常用的有三種 模板描述 hash模組識別符號的hash,一般應用於filename name hash js chunkhash按需載入塊內容的hash,根據chunk自身的內容計算而來,js name chunkhash...

優化webpack4配置,加快頁面訪問時間

一 問題 在測試環境開啟專案 只需要1s左右,但在正式環境則要12s左右才能開啟頁面,這麼慢才響應真的讓人很惱火,雖然網路肯定有很大原因,但前端 載入也是著實要優化才行。我看了一下瀏覽器開發者工具,發現前端把整個專案的 檔案都載入了,我也是醉了 因為這個專案我只是接手同事的 最大問題就是在這裡了。優...

學習webpack4 基礎配置

學習webpack4 基礎配置 學習webpack4 html處理 學習webpack4 樣式處理 學習webpack4 es6語法轉化 學習webpack4 第三方庫的使用 學習webpack4 抽離公共 yarn init y 初始化專案 yarn add webpack webpack cli...