成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

webpack3 升級(jí) webpack4踩坑記錄

馬忠志 / 497人閱讀

摘要:本篇不包含所有坑,暫時(shí)只記錄自己踩到的部分坑一安裝安裝最新版本安裝新增依賴(lài)這個(gè)在中,本身和它的是在同一個(gè)包中,中將兩個(gè)分開(kāi)管理。我記錄下自己更新這個(gè)的過(guò)程,以下前半部分可以直接跳過(guò)。以下記錄踩坑過(guò)程。

本篇不包含所有坑,暫時(shí)只記錄自己踩到的部分坑
一.安裝

安裝webpack4最新版本

npm install --save-dev webpack@4 

安裝新增依賴(lài) webpack-cli

這個(gè)在webpack3中,webpack本身和它的CLI是在同一個(gè)包中,webpack4中將兩個(gè)分開(kāi)管理。

npm install --save-dev webpack-cli
二.運(yùn)行

執(zhí)行本地打包以及運(yùn)行操作

npm run build:dll
npm run start

記得添加mode

用來(lái)告知 webpack 使用相應(yīng)環(huán)境的內(nèi)置優(yōu)化

module.exports = {
  mode: "production" //或者 "development"
};

其中遇到的報(bào)錯(cuò):

1.Error:webpack.optimize.UglifyJsPlugin has been removed,pleaseuseconfig.optimization.minimizeinstead.

UglifyJsPlugin是用來(lái)對(duì)js文件進(jìn)行壓縮

webpack4中UglifyJsPlugin被廢除,需要安裝新的插件uglifyjs-webpack-plugin進(jìn)行替換,見(jiàn)官方文檔

安裝uglifyjs-webpack-plugin

npm install uglifyjs-webpack-plugin --save-dev 

更改 webpack.dll.config.js || webpack.prod.config.js

去除

-  new webpack.optimize.UglifyJsPlugin({
-    compress: {
-      warnings: false
-    },
-    mangle: {
-      safari10: true,
-    },
-    output: {
-      comments: false,
-      ascii_only: true,
-    },
-    sourceMap: false,
-    comments: false
-  }),

添加

const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
...
optimization: { //與entry同級(jí)
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          compress: false,
          mangle: true,
          output: {
            comments: false,
          },
        },
        sourceMap: false,
      })
    ]   
},
  

注意:uglifyjs-webpack-plugin更多的配置請(qǐng)參考詳細(xì)配置

2.Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.

CommonsChunkPlugin 主要是用來(lái)提取第三方庫(kù)和公共模塊

CommonsChunkPlugin 已被移除,用splitChunks替代,見(jiàn)官方文檔

更改webpack.base.config.js

去除

// new webpack.optimize.CommonsChunkPlugin({
//   children: true,
//   async: true,
//   minChunks: 2,
// }),

添加

optimization: {
    splitChunks: {
      chunks: "async",
      minChunks: 2,
    },
  },

注意:splitChunks更多的配置請(qǐng)參考詳細(xì)配置

3.compilation.mainTemplate.applyPluginsWaterfall is not a function

更新html-webpack-plugin到最新版本

npm install html-webpack-plugin@latest --save-dev
4.Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead

這個(gè)最后解決方式是用mini-css-extract-plugin替代。

我記錄下自己更新這個(gè)的過(guò)程,以下前半部分可以直接跳過(guò)。

更新extract-webpack-plugin到最新版本

npm install --save-dev [email protected]

繼續(xù)報(bào)錯(cuò)

Path variable [contenthash] not implemented in this context: static/css/style.[contenthash].css

在之前版本中我們使用extract-text-webpack-plugin來(lái)提取CSS文件,不過(guò)在webpack 4.x中則應(yīng)該使用mini-css-extract-plugin來(lái)提取CSS到多帶帶文件中

更改如下

這是基于webpack 3.0

const utils = require("./utils")
const ExtractTextPlugin = require("extract-text-webpack-plugin")
module.exports = {
    //...
    new ExtractTextPlugin({
        filename: utils.assetsPath("css/[name].[contenthash:7].css")
    })
}

基于webpack 4.0

const utils = require("./utils")
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
module.exports = {
    //...
    new MiniCssExtractPlugin({
        filename: utils.assetsPath("css/[name].[contenthash:7].css")
    })
}

css 以及 mini-css-extract-plugin 的 rule配置

module: {
    rules: [
      {
        test: /.(css|less)$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
          },
          {
            loader: "css-loader",
            options: {
              modules: true,
              importLoaders: 1,
              localIdentName: "[local]"
            }
          },
          {
            loader: "postcss-loader",
            options: {
              ident: "postcss",
              plugins: () => [
                require("postcss-flexbugs-fixes"),
                autoprefixer({
                  browsers: [
                    ">1%",
                    "last 4 versions",
                    "Firefox ESR",
                    "not ie < 9", // React doesn"t support IE8 anyway
                  ],
                  flexbox: "no-2009",
                }),
              ],
            }
          },
          {
            loader: "less-loader",
            options: {
              modifyVars: theme
            }
          }
        ]

      },
    ],
  },
5.TypeError: webpack.optimize.DedupePlugin is not a constructor

DedupePlugin是用來(lái)查找相等或近似的模塊,避免在最終生成的文件中出現(xiàn)重復(fù)的模塊

已經(jīng)被廢除,刪除即可,見(jiàn)官網(wǎng)

6.FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of...

這個(gè)是內(nèi)存溢出了,需要在啟動(dòng)命令中加一個(gè)空間 --max_old_space_size=4096

"scripts": {
    "start": "better-npm-run start",
},
"betterScripts": {
    "start": {
      "command": "node --max_old_space_size=4096 build/server.js",
      "env": {
        "NODE_ENV": "development",
        "DEPLOY_ENV": "",
        "PUBLIC_URL": "",
        "PORT": "8082"
      }
    },
}

7.最后還有一個(gè)大坑

offline-plugin插件,配置service worker。這個(gè)插件的報(bào)錯(cuò)同以上UglifyJsPlugin的報(bào)錯(cuò)。

只需要更新到最新版本即可。

以下記錄踩坑過(guò)程。

Error:webpack.optimize.UglifyJsPlugin has been removed,pleaseuseconfig.optimization.minimizeinstead.

因此導(dǎo)致我,刪了好幾次UglifyJsPlugin以及uglifyjs-webpack-plugin相關(guān)的所有代碼,然后依然報(bào)錯(cuò)。

又以為是緩存問(wèn)題,我重啟了vscode,重啟了終端,電腦也嘗試重啟一遍,依然報(bào)錯(cuò)。

最后逐行注釋代碼,運(yùn)行打包操作,發(fā)現(xiàn)是offline-plugin插件的問(wèn)題。

問(wèn)題所在:offline-plugin5.0以前的版本會(huì)帶有webpack.optimize.UglifyJsPlugin操作,最新的應(yīng)該做了些處理。

詳情參考

最后處理方式,更新offline-plugin到最新的版本

npm install offline-plugin --save-dev
三、新增TypeScript的打包

安裝

npm install --save-dev typescript ts-loader

添加tsconfig.json文件

可以利用ts初始化命令自動(dòng)添加

tsc --init

也可以手動(dòng)新增文件。

其中配置詳情如下,具體查閱tsconfig.json配置詳情

{
  "compilerOptions": {
    "outDir": "./dist/",
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "jsx": "react",
    "allowJs": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "noUnusedParameters": true,
    "noUnusedLocals": true,
  },
  "module": "ESNext",
  "exclude": ["node_modules"]
}

配置 webpack 處理 TypeScript, 主要更改點(diǎn):

添加rule

添加需要處理的文件后綴,".ts"、".tsx"等

rules: [
  {
    test: /.tsx?$/,
    use: "ts-loader",
    exclude: /node_modules/
  }
]
resolve: {
    extensions: [ ".tsx", ".ts", ".js" ]
},

測(cè)試文件TestTsLoader.tsx

用來(lái)檢測(cè)是否配置成功,導(dǎo)入相應(yīng)頁(yè)面即可測(cè)試。實(shí)測(cè)ok

import * as React from "react"

interface TsProps {
  name: string
  company: string
}

export default class TestTsLoader extends React.Component {
  render() {
    return (
      

Hello, I am {this.props.name}, I in {this.props.company} now!

) } }

參考資料

1.https://blog.csdn.net/harsima...
2.https://www.typescriptlang.or...
3.https://webpack.docschina.org...
四.再推薦一個(gè)npm script命令優(yōu)化插件 better-npm-run

參考:

1.https://www.jianshu.com/p/710...
2.https://www.npmjs.com/package...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/54261.html

相關(guān)文章

  • 如何優(yōu)雅的升級(jí)webpack4

    摘要:默認(rèn)出入口在中,不再?gòu)?qiáng)制要求指定和路徑。構(gòu)建模式提供了兩種構(gòu)建模式可供選擇和選項(xiàng)描述會(huì)將的值設(shè)為。如果是,那就會(huì)開(kāi)啟。默認(rèn)只會(huì)對(duì)按需加載的代碼做分割。在或更低版本中,如果你想為一個(gè)推導(dǎo)出來(lái)的定制選項(xiàng),你不得不在自己的選項(xiàng)中將它重復(fù)一遍。 前言 現(xiàn)在距離2018年2月15號(hào)webpack4.0.0出來(lái)已經(jīng)有一段時(shí)間了,現(xiàn)在已經(jīng)出了 @vue/cli 3.0,但是樓主還沒(méi)試過(guò),聽(tīng)說(shuō)很強(qiáng)大,...

    zhangfaliang 評(píng)論0 收藏0
  • webpack4 系列教程: 前言

    摘要:課程地址全部課程地址立即進(jìn)入課程源碼目錄截至按照知識(shí)點(diǎn),目錄分成了個(gè)文件夾之后還會(huì)持續(xù)更新。個(gè)人網(wǎng)站原文鏈接系列教程前言 本文檔已經(jīng)過(guò)時(shí),最近內(nèi)容請(qǐng)看:https://godbmw.com/passage/76。一共16節(jié)課程和代碼。謝謝支持。 1. 什么是webpack? 前端目前最主流的javascript打包工具,在它的幫助下,開(kāi)發(fā)者可以輕松地實(shí)現(xiàn)加密代碼、多平臺(tái)兼容。而最重要的...

    DevWiki 評(píng)論0 收藏0
  • webpack4 的開(kāi)發(fā)環(huán)境配置說(shuō)明

    摘要:的開(kāi)發(fā)環(huán)境配置說(shuō)明完整的的配置地址開(kāi)發(fā)環(huán)境的搭建,總體而言就比較輕松,因?yàn)橛脩艟褪情_(kāi)發(fā)者們。的做法是在的字段配置類(lèi)似這樣這樣配置后,當(dāng)運(yùn)行時(shí),在里通過(guò)可以取到值以來(lái)做判斷就可以啦。 webpack4 的開(kāi)發(fā)環(huán)境配置說(shuō)明 完整的webpack4的配置clone地址: https://github.com/ziwei3749/... 開(kāi)發(fā)環(huán)境的搭建,總體而言就比較輕松,因?yàn)橛脩艟褪情_(kāi)發(fā)者們...

    fancyLuo 評(píng)論0 收藏0
  • webpack4 的生產(chǎn)環(huán)境優(yōu)化

    摘要:的生產(chǎn)環(huán)境優(yōu)化完整配置的可以參考本文主要介紹了生產(chǎn)環(huán)境我都做了哪些優(yōu)化文章的結(jié)構(gòu)如下靜態(tài)資源路徑。分配不同的關(guān)于穩(wěn)定性的坑注意區(qū)分整個(gè)項(xiàng)目有變動(dòng)時(shí),變化。而生產(chǎn)環(huán)境可以這一項(xiàng),因?yàn)槲覀儾恍枰谏a(chǎn)環(huán)境調(diào)試代碼。 webpack4 的生產(chǎn)環(huán)境優(yōu)化 webpack4完整配置的可以參考: https://github.com/ziwei3749/... 本文主要介紹了 webpack4 生產(chǎn)...

    bang590 評(píng)論0 收藏0
  • webpack4.x升級(jí)摘要

    摘要:以為例,編寫(xiě)來(lái)幫助我們完成重復(fù)的工作編譯壓縮我只要執(zhí)行一下就可以檢測(cè)到文件的變化,然后為你執(zhí)行一系列的自動(dòng)化操作,同樣的操作也發(fā)生在這些的預(yù)處理器上。的使用是針對(duì)第三方類(lèi)庫(kù)使用各種模塊化寫(xiě)法以及語(yǔ)法。 showImg(https://segmentfault.com/img/bVbtZYK); 一:前端工程化的發(fā)展 很久以前,互聯(lián)網(wǎng)行業(yè)有個(gè)職位叫做 軟件開(kāi)發(fā)工程師 在那個(gè)時(shí)代,大家可能...

    levinit 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<