亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

webpack@v4升級踩坑(小結)

2019-11-19 12:46:18
字體:
來源:轉載
供稿:網友

之前看到各大公眾號都在狂推 webpack 新版發布的相關內容,之前就嘗試了升級,由于部分插件的原因,未能成功,現在想必過了這么久已經可以了,今天就來試一下在我的項目中升級會遇到哪些坑。

查閱更新日志

在安裝更新之前,先大致瀏覽了一下更新日志,對大部分用戶來說遷移上需要注意的應該就是這些點:

  • 在命令行界面運行打包指令需要安裝 webpack-cli ;
  • 打包需要指定打包模式 production or development ,在不同模式下會添加不同的默認配置, webpack.DefinePlugin 插件的 process.env.NODE_ENV 的值不需要再定義,將根據模式自動添加;
  • 不再需要在 plugin 中設置 new webpack.optimize.UglifyJsPlugin ,只需要在配置中設置開關即可,并且 production 模式自動開啟,可以通過 optimization.minimizer 指定其他壓縮庫;
  • 刪除了 CommonsChunkPlugin ,功能已遷移至 optimization.splitChunks , optimization.runtimeChunk。

遷移

  1. 安裝最新的 webpack 、 webpack-cli 、 webpack-dev-server ;
  2. 為開發中和發布分別配置 mode ,刪除 webpack.DefinePlugin 配置,并且去掉 package.json 中啟動腳本的 NODE_ENV 區別環境變量定義;
  3. 去掉 new webpack.optimize.UglifyJsPlugin 、 ModuleConcatenationPlugin 配置。

爬坑

在這些配置好之后我遇到的第一個問題就是打包時 extract-text-webpack-plugin 插件炸了!這里提供了這里有兩種解決方案:

  • 方法一:安裝指定 extract-text-webpack-plugin 版本 @next ;
  • 方法二:使用 mini-css-extract-plugin 替代。

如果使用方法二注意在發布打包時需要指定 css 壓縮庫配置,并且需要同時寫入 js 壓縮庫,因為你一旦指定了 optimization.minimizer 就會棄用內置的代碼壓縮:

/* webpack.config.js */const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = () => { const config = {  module: {   rules: [    {     test: //.css$/,     use: [      MiniCssExtractPlugin.loader,      'css-loader?importLoaders=1',      'postcss-loader'     ]    },    {     test: //.less$/,     use: [      MiniCssExtractPlugin.loader,      'css-loader?importLoaders=1',      'postcss-loader',      'less-loader'     ]    }   ]  },  resolve: {   extensions: ['.js', '.jsx', '.less']  } };  if (process.env.NODE_ENV === 'development') {  config.module.rules[0].use = [   'css-hot-loader',   MiniCssExtractPlugin.loader,   'css-loader?importLoaders=1',   'postcss-loader'  ];  config.module.rules[1].use = [   'css-hot-loader',   MiniCssExtractPlugin.loader,   'css-loader?importLoaders=1',   'postcss-loader',   {    loader: 'less-loader',    options: {     modifyVars: theme    }   }  ]; } return config;};/* webpack.config.prod.js */const merge = require('webpack-merge');const UglifyJsPlugin = require('uglifyjs-webpack-plugin');const MiniCssExtractPlugin = require('mini-css-extract-plugin');const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');const webpackBaseConfig = require('./webpack.config')();module.exports = merge(webpackBaseConfig, { mode: 'production', optimization: {  minimizer: [   new UglifyJsPlugin({    cache: true,    parallel: true,    uglifyOptions: {     compress: {      warnings: false,      drop_debugger: true,      drop_console: false     }    }   }),   new OptimizeCSSAssetsPlugin({})  ] }, plugins: [  new MiniCssExtractPlugin({   filename: 'css/[name].css'  }) ]});

happypack 炸了,小場面,升級就好 @5.0.0-beta.3happypackextract-text-webpack-plugin 搭配使用更佳,mini-css-extract-plugin 未測試)。webpack-browser-plugin 炸了,小場面,棄用就好,然后在 devServer 中配置 openopenPage 。

上面的配置中可以看到我使用判斷語句 process.env.NODE_ENV === 'development' 在開發配置中加入了 css-hot-loader ,但是這里實際上是獲取到的是 undefined ,咦?這是什么鬼?查閱更新日志是怎么說的:

process.env.NODE_ENV are set to production or development (only in built code, not in config)

意思就是說我們在使用的工程項目代碼中會獲取到這個變量,但是打包配置中使用這個變量還是獲取不到的,我也實際驗證了這個結果,so,我在 package.json 的開發啟動腳本中還是加上了 NODE_ENV='development' 。

最后

總體來說現在的升級時機已經成熟,大多需要用到的功能和插件都有平滑的升級或替代方案,建議在開始升級前安裝最新發布的插件版本,也可以參考下我的項目配置react-with-mobx-template。

還有對插件的一些 API 也做了一些更改,如果你是插件開發者也可以嘗試發布新的插件版本,我在使用自己的版本號提取插件webpack-version-plugin時發現 compiler.plugin 已經被提示過氣了, webpack@v4 使用最新的 compiler.hooks.emit.tap 觸發事件,嗯,最后的這部分廣告真硬!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩第一视频| 久久久久久久久爱| 国产精品久久久久久久久久尿| 久久精品国产一区二区三区| 成人h片在线播放免费网站| 91在线播放国产| 欧美电影在线观看完整版| 91欧美精品成人综合在线观看| 亚洲国产天堂久久国产91| 狠狠躁夜夜躁人人爽超碰91| 国产69精品99久久久久久宅男| 欧美电影在线观看网站| 亚洲精品99999| 疯狂做受xxxx高潮欧美日本| 日韩美女视频免费看| 日韩一级黄色av| 一区二区欧美亚洲| 亚洲一区二区中文字幕| 日韩成人中文字幕| 国产午夜一区二区| 国产九九精品视频| 亚洲国产欧美一区二区丝袜黑人| 欧美日韩激情视频8区| 亚洲aa中文字幕| 九九久久国产精品| 亚洲女人初尝黑人巨大| 欧美精品久久久久久久久| 久久天堂电影网| 人人爽久久涩噜噜噜网站| 欧美精品videossex性护士| 色综久久综合桃花网| 日韩精品在线免费观看视频| 国产日韩欧美成人| 久久免费视频观看| 国产免费久久av| 亚洲视频免费一区| 国产亚洲欧美日韩一区二区| 欧美最猛性xxxx| 亚洲国产欧美在线成人app| 久久综合伊人77777尤物| 北条麻妃一区二区在线观看| 国产91热爆ts人妖在线| 色狠狠久久aa北条麻妃| 久久精品久久久久| 欧美有码在线观看视频| 亚洲黄页网在线观看| 欧美日韩人人澡狠狠躁视频| 国产精品第一视频| 欧美www视频在线观看| 亚洲香蕉av在线一区二区三区| 亚洲人成自拍网站| 色偷偷91综合久久噜噜| 亚洲第一区在线| 91中文在线视频| 亚洲自拍另类欧美丝袜| 国产精品亚洲激情| 国产日本欧美一区| 欧美性xxxxxxx| 8x海外华人永久免费日韩内陆视频| 久久久久久久久久久91| 久久国产色av| 欧美大成色www永久网站婷| 国产一区二区av| 久久亚洲国产精品成人av秋霞| 精品国产一区二区三区久久久狼| 一区二区欧美日韩视频| 国产欧美日韩精品专区| 欧美日韩激情美女| 国产欧美精品日韩精品| 精品毛片网大全| 亚洲国产精品字幕| 好吊成人免视频| 亚洲欧美国产精品专区久久| 久久亚洲精品一区二区| 91中文在线视频| 日韩电影免费在线观看中文字幕| 亚洲国产高清福利视频| 欧美性一区二区三区| 久久久久久成人精品| 成人黄色短视频在线观看| 欧美成人精品在线| 在线观看不卡av| 国产精品夫妻激情| 热久久免费国产视频| 欧美亚洲日本网站| 96pao国产成视频永久免费| 亚洲专区中文字幕| 欧美精品videossex88| 亚洲的天堂在线中文字幕| 欧美日韩国产二区| 欧美一级大胆视频| 在线观看欧美www| 国产狼人综合免费视频| 国产美女久久精品香蕉69| 国产在线观看一区二区三区| 成人黄色激情网| 日韩黄色av网站| 欧美激情精品久久久久久蜜臀| 中文字幕日韩精品有码视频| 亚洲美女精品久久| 亚洲国产精品久久久| 欧美精品aaa| 欧美激情三级免费| 成人h视频在线观看播放| 国产精品日日摸夜夜添夜夜av| 91在线无精精品一区二区| 日韩精品欧美国产精品忘忧草| 亚洲人成网站免费播放| 九九精品在线播放| 91最新国产视频| 欧美日韩一区二区三区| 亚洲国产精品专区久久| 久久久久久久影视| 在线观看久久久久久| 国产精品jvid在线观看蜜臀| 国产精品第8页| 国产视频一区在线| 久久综合伊人77777尤物| 亚洲天堂影视av| 欧美大片免费观看在线观看网站推荐| 国产亚洲人成网站在线观看| 疯狂蹂躏欧美一区二区精品| 久久成人免费视频| 日本视频久久久| 久久久久久久成人| 91久久在线观看| 成人午夜激情网| 亚洲精品小视频在线观看| 国产在线视频不卡| 日韩久久精品成人| 色偷偷偷亚洲综合网另类| 日韩av资源在线播放| 亚洲精品日韩久久久| 97精品国产97久久久久久春色| 国产精品欧美在线| 91精品国产高清自在线| 国产精品美女网站| 国产在线观看精品一区二区三区| 一本色道久久88亚洲综合88| 欧美日韩国产精品| 日韩精品免费一线在线观看| 亚洲男人天堂古典| 亚洲视频欧美视频| 亚洲欧美一区二区三区在线| 欧美成人三级视频网站| 中文字幕一区二区精品| 欧美激情视频三区| 欧美日韩中文字幕综合视频| 日韩av免费在线观看| 国产精品久久中文| 欧美插天视频在线播放| 在线成人免费网站| 亚洲欧美制服综合另类| 欧美日韩国产综合新一区| 亚洲一区二区三区成人在线视频精品| 91精品免费看| 亚洲区免费影片| 亚洲丁香婷深爱综合| 亚洲午夜女主播在线直播| 日韩av网址在线观看| 色噜噜狠狠狠综合曰曰曰| 国产丝袜一区二区| 久久久久久久成人| 日韩欧美在线字幕|