一、先放上項目目錄結構
二、問題總結
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)。
還請各位大神多多指教