最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

webpack@v4升級踩坑(小結(jié))

 更新時間:2018年10月08日 13:53:28   作者:BingqiChen  
這篇文章主要介紹了webpack@v4升級踩坑(小結(jié)),之前就嘗試了升級,由于部分插件的原因,未能成功,今天就來試一下在我的項目中升級會遇到哪些坑。感興趣的小伙伴們可以參考一下

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

查閱更新日志

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

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

遷移

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

爬坑

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

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

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

/* 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' 在開發(fā)配置中加入了 css-hot-loader ,但是這里實際上是獲取到的是 undefined ,咦?這是什么鬼?查閱更新日志是怎么說的:

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

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

最后

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

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

相關(guān)文章

  • JavaScript中的比較操作符>、<、>=、<=介紹

    JavaScript中的比較操作符>、<、>=、<=介紹

    這篇文章主要介紹了JavaScript中的比較操作符>、<、>=、<=介紹,本文先是講解了操作符的一些使用規(guī)則,然后給出了操作實例,需要的朋友可以參考下
    2014-12-12
  • JavaScript實現(xiàn)與使用發(fā)布/訂閱模式詳解

    JavaScript實現(xiàn)與使用發(fā)布/訂閱模式詳解

    這篇文章主要介紹了JavaScript實現(xiàn)與使用發(fā)布/訂閱模式,較為詳細(xì)的分析了發(fā)布/訂閱模式的概念、原理并結(jié)合實例形式分析了javascript實現(xiàn)與使用發(fā)布/訂閱模式的相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • JavaScript代碼復(fù)用模式實例分析

    JavaScript代碼復(fù)用模式實例分析

    任何編程都提出代碼復(fù)用,否則話每次開發(fā)一個新程序或者寫一個新功能都要全新編寫的話,效率太差了,接下來我們將針對代碼復(fù)用來進(jìn)行討論,需要的朋友可以參考下
    2012-12-12
  • javascript之分片上傳,斷點續(xù)傳的實際項目實現(xiàn)詳解

    javascript之分片上傳,斷點續(xù)傳的實際項目實現(xiàn)詳解

    在本篇文章里小編給大家整理了關(guān)于javascript之分片上傳,斷點續(xù)傳的實際項目實現(xiàn)的詳細(xì)內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-09-09
  • JS中‘hello’與new String(‘hello’)引出的問題詳解

    JS中‘hello’與new String(‘hello’)引出的問題詳解

    這篇文章主要給大家介紹了關(guān)于JS中'hello'與new String('hello')引出的問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • js獲取系統(tǒng)的根路徑實現(xiàn)介紹

    js獲取系統(tǒng)的根路徑實現(xiàn)介紹

    js如何獲取系統(tǒng)的根路徑,在本文給出了詳細(xì)的方法,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • JS獲取當(dāng)前頁面名稱的簡單實例

    JS獲取當(dāng)前頁面名稱的簡單實例

    下面小編就為大家?guī)硪黄狫S獲取當(dāng)前頁面名稱的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • LayerClose彈窗關(guān)閉刷新方法

    LayerClose彈窗關(guān)閉刷新方法

    今天小編就為大家分享一篇LayerClose彈窗關(guān)閉刷新方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 原生js實現(xiàn)跨瀏覽器獲取鼠標(biāo)按鍵的值

    原生js實現(xiàn)跨瀏覽器獲取鼠標(biāo)按鍵的值

    e.button W3C是獲取鼠標(biāo)按鍵 0 表示左鍵 1表示中鍵 2表示右鍵 而IE瀏覽器則是 1表示左鍵 4表示中間 2表示右鍵 這里的IE瀏覽器主要是IE8以下的瀏覽器,感興趣的朋友可以參考下哈
    2013-04-04
  • 利用JavaScript編寫一個簡單的1024小游戲

    利用JavaScript編寫一個簡單的1024小游戲

    在每年的10月24日,我們都會慶祝程序員節(jié),這是一個向所有辛勤工作、創(chuàng)造出無數(shù)令人驚嘆應(yīng)用和系統(tǒng)的程序員們致敬的日子,為了紀(jì)念這個特殊的日子,我們將通過編寫一個簡單的1024小游戲來向所有程序員們表示敬意,本文將詳細(xì)解釋如何使用JavaScript編寫這個小游戲
    2023-10-10

最新評論

保亭| 遂昌县| 武宁县| 东丽区| 鸡西市| 辽源市| 牙克石市| 临海市| 宝应县| 香河县| 安平县| 斗六市| 建阳市| 阳高县| 阿坝县| 安福县| 二手房| 略阳县| 泗水县| 平和县| 喀喇沁旗| 六枝特区| 永康市| 白朗县| 扶余县| 永寿县| 双城市| 甘谷县| 泸水县| 邮箱| 茂名市| 游戏| 沂源县| 泸西县| 乌拉特后旗| 牙克石市| 津市市| 大同县| 秭归县| 余庆县| 佛坪县|