基于creact-react-app的webpack4升級(jí)之路

webpack4的升級(jí)教程網(wǎng)上實(shí)在有很多,我也是跟著教程進(jìn)行升級(jí),但是我發(fā)現(xiàn)在我使用了creact-react-app腳手架構(gòu)建的項(xiàng)目中進(jìn)行升級(jí),會(huì)有一些其它bug存在,這里做一個(gè)排查和解決的記錄。

開發(fā)環(huán)境配置

  1. 將webpack升級(jí)到webpackV4
  2. 把項(xiàng)目run起來
  3. 此時(shí)會(huì)遇到第一個(gè)錯(cuò)誤
Plugin could not be registered at 'html-webpack-plugin-before-html-processing'. Hook was not found.
BREAKING CHANGE:
There need to exist a hook at 'this.hooks'. To create a compatiblity layer for this hook, hook into 'this._pluginCompat'.

需要做的事情是 升級(jí)相關(guān)依賴包

webpack-cli
webpack-dev-server
html-webpack-plugin
react-dev-utils
file-loader
url-loader
  1. 過程中會(huì)遇到很多奇怪的報(bào)錯(cuò)
Module build failed: TypeError: Cannot read property 'context' of undefined

類似這種錯(cuò)誤,就是你要升級(jí)你的相關(guān)loader包了

DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
    at ModuleScopePlugin.apply

更新 react-dev-utils 和 extract-text-webpack-plugin

this.htmlWebpackPlugin.getHooks is not a function

將HtmlWebpackPlugin放置于InterpolateHtmlPlugin之前,并且傳遞給InterpolateHtmlPlugin,然后設(shè)置PUBLIC_URL

new HtmlWebpackPlugin({
    inject: true,
    template: paths.appHtml,
}),
new InterpolateHtmlPlugin(HtmlWebpackPlugin, {
    PUBLIC_URL: publicUrl,
}),
Object proxy configuration is superseded by src/setupProxy.js To check
if action is required, look for the proxy key in package.json and
follow this table:

更新版本后的packjson不支持Proxy為對(duì)象的寫法,改為字符串形式

missingDeps.some not a function

react-dev-utils要升級(jí)到6及以上的版本

this.htmlWebpackPlugin.getHooks is not a function

升級(jí) html-webpack-plugin 4.0.0.alpha-2

生成環(huán)境配置

1. 拋棄new webpack.optimize.UglifyJsPlugin,在production 模式下,webpack提供了splitChunks和minimize進(jìn)行壓縮
2. 升級(jí) webpack-manifest-plugin 到 ^2.0.0-rc.2
3. 替換extract-text-webpack-plugin 為 mini-css-extract-plugin

官網(wǎng)配置

至此我認(rèn)為關(guān)于creact-react-app腳手架的webpack4升級(jí)完成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容