webpack4之踩坑總結


一、先放上項目目錄結構

二、問題總結

 1、關於process.env.NODE_ENV問題

剛開始的時候,我想在配置文件中使用到這個環境變量,卻發現一直獲取不到值,暈暈暈,查了資料才知道,這個環境變量是給除配置文件之外的文件使用的。

因為我需要在webpack.base.conf.js配置文件中區分是開發環境還是生成環境,於是我做了如下處理:

// 第一:在我的npm腳本中加入--mode=production來確定這是生產環境
"build": "webpack --mode=production --config ./build/webpack.prod.conf.js --color --progress"
// 第二:通過process.argv判斷是否存在標識--mode=production來區分開發環境和生產環境
const isProduction = process.argv.indexOf('--mode=production') > -1;

 2、關於clean-webpack-plugin插件清除文件問題

// 剛開始的時候我只是這樣做了一個簡單的配置,以為可以生效
// 然而,然並卵
new CleanWebpackPlugin('dist')

 

// 之后在閱讀了插件源代碼和編譯提示之后,才找到問題所在(ps:源代碼量不多)
// 第一:該插件只會清除插件所在文件夾下的子文件
// 第二:由於我的配置文件是在build目錄下,所以插件的根目錄在build文件夾
// 第三:因為我要刪除的dist文件夾是build的兄弟目錄,所以插件會跳過跳過跳過刪除操作
// 綜上所述,正確的操作是:設置項目根目錄為插件的根目錄
new CleanWebpackPlugin('dist', {
    root: path.join(__dirname, '../')
})

 

3、關於extract-text-webpack-plugin提取css問題

剛開始我的配置是這樣子的,忽視了我的配置是多入口的。在我打包出來之后,我的一部分css代碼被提取出來的,而我配置成css module的代碼卻一直沒有提取出來,因為這個問題,我找了一個晚上還是沒有找出問題所在。

new ExtractTextPlugin("styles.css")

 

直到,我在webpack文檔中我看到了這樣的一段話:

警告: ExtractTextPlugin 對 每個入口 chunk 都生成一個對應的文件,所以當你配置多個入口 chunk 的時候,你必須使用 [name], [id] 或 [contenthash]

 

從這個時候我才明白,之所以存在“只提取部分代碼的問題“,是因為我只設置了一個文件,導致了文件內容覆蓋,后面入口文件提取出來的css覆蓋了前面入口文件提取出來的css。

哭暈在廁所。。。

// 正確的操作如下:
new
ExtractTextPlugin({ // 如果需要加上文件目錄'css/[name].css',則需要考慮css里面應用文件相對目錄問題 filename: '[name].css', allChunks: true })

 

4、關於css文件壓縮問題

剛開始,我用了css-loader提供的minimize選項,不可能的,這輩子都不可能完成壓縮的

{
loader:
'css-loader', options: { minimize: true } }

 

查了資料才發現,原來css-loader已經在新版本已經移除了minimize這個壓縮選項,而推薦了其他的方案:

use postcss-loader with cssnano
use optimize-cssnano-plugin

 

而我采取了其中的第一種壓縮方案,即postcss的方案,順便也學習下postcss的配置,安裝了postcss-loader和cssnano依賴之后,需要做如下配置:

// 第一:在需要用postcss處理的文件加入postcss-loader
test: /\.css/, use:['style-loader','css-loader','postcss-loader']

 

// 第二:配置postcss,需要在項目根目錄新建文件postcss.config.js
module.exports = { plugins: [ require('cssnano')({ preset: 'default' }), ] };

 

5、有待更新...

三、總結

在學習webpack的過程中,我主要以webpack中文文檔(https://webpack.docschina.org/concepts/)和github這兩個網站為主,當然也少不了百度和google。學習下來發現,只要你認真看官方文檔及去github上找官方給出來的示例,總能找到你的解決方案。

最后,貼出我的demo(https://github.com/xieqian-xq/demo/tree/master/webpack)。

還請各位大神多多指教


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM