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

首頁 > 開發 > JS > 正文

記一次webapck4 配置文件無效的解決歷程

2024-05-06 16:46:10
字體:
來源:轉載
供稿:網友

webpack@4.x的變化

先來說下webpack4和之前版本里一些主要的變化:

1、webpack不再支持node v4,這是因為新的webpack和附屬插件使用了es6的語法,v4版本對es6不是很到位,所以,就不伺候了。

2、開始采取約定優于配置的思路,webpack@4.x里把很多選項都設置了默認值,比如入口就是./src,輸出目錄就是./dist,當然如果你自己去設置,它也不會攔著。所以在用webpack@4.x的時候,我們甚至都可以沒有webpack.config.js這個配置文件也能一樣打包。

3、拆分了舊版本里的webpack,分成了用來處理邏輯的webpack和提供可執行命令的webpack-cli,這也是有的同學把webpack裝成新版本以后會報找不到webpack-cli模塊這個錯誤的原因。

4、添加了mode選項,用來區分編譯的環境,提供了development、production和none三個選項,理論上這個選項是強制指定的,其實不指定的話它也是有默認值的,但會給出一個warning,官方這么強烈建議了,就顯式的指定一下吧。指定方式有兩種,一是在啟動命令里:

./node_modules/.bin/webpack --mode production

另外一種就是在配置文件里指定,方式如下:

var config = {  mode: 'production' // 可選development、production和none}

5、配置上的變動,類似刪除了commonChunksPlugin,用optimization來代替這種。還有loader的用法也和1.15.0不一樣了,但這個升級是在之前版本里就有的,不是webpack@4.x帶來的。

6、性能優化,提高了打包性能。另外從webpack2起,引入了Tree-shaking機制來提出沒有被引用的模塊。它的原理是按著引用關系重新建立一個新的依賴樹,而沒有被引用的模塊就不會被打包到最后的代碼里。之前的壓縮優化方式是先把所有模塊都掛到樹上,然后通過分析后,刪掉沒被引用的模塊。從字面意思來看,我覺得原來的方式更像在搖樹,把沒用的搖下來。這兩種方式最后壓縮完的結果可能類似,但設計思路完全是從兩個方向走的。

7、其他。以上這些就是一些比較主要的變化,更詳細的升級文檔可以參考下官方的說明:https://github.com/webpack/webpack/releases

前言

升級webpack4,一定要去看文檔,特別是 更新說明 ,不要自持用過原本webpack就自己開始折騰。折騰到后面,可能就默默流下眼淚了。

webpack4的變化

webpack-cli抽離

webpack-cli被單獨拆了出來,使用的時候如果只是全局裝了CLI,直接執行的時候是可以的。

webpack --config ./config/webpack.dev.js

如果是寫在npm hook里面會發現有點問題:

//package.json"scripts": {  "dev": "webpack --config ./config/webpack.dev.js" }//shallnpm run dev

此時就會給提示:

One CLI for webpack must be installed. These are recommended choices, delivered as separate packages:
 - webpack-cli (https://github.com/webpack/webpack-cli)
   The original webpack full-featured CLI.
 - webpack-command (https://github.com/webpack-contrib/webpack-command)
   A lightweight, opinionated webpack CLI.
We will use "npm" to install the CLI via "npm install -D".
Which one do you like to install (webpack-cli/webpack-command):

如果是我沒有全局裝,我肯定會意識到要選一個,這個坑關鍵是我全局裝了。所以就在那折騰半天。

其實官方文檔開頭就說明了。

npm install webpack webpack-cli --save-dev

安裝完成之后,繼續執行發現有warning:

WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/

mode規則

配置規則:必須在production 和 development之間選擇一種,以便webpack 使用相應模式的內置優化

  1. production支持所有類型的優化已生成最優bundles
  2. development允許注釋、提示和eval devtool devtool的差別可以參考這里
  3. production不支持watching、development針對快速增量重建進行了優化
  4. production支持 module concatenating(Scope Hoisting)即作用域提升,可以將模塊打包在一個函數里,這樣減少了函數聲明,文件體積也會減小。 詳細參考看這里
  5. process.env.NODE_ENV被設置用來區分環境(僅僅在構建代碼而非config里面)
  6. 有一個hidden none mode的模式可以禁用所有內容

用法:

1、配置文件中:

module.exports = {entry: Entrys,mode: 'development'}

2、cli 參數傳入

webpack --mode=development

兩種方式都是可行的,不過我遇到過一個很坑的問題,困擾自己好幾天,最后知道真相的自己眼淚掉下來后面再提這個問題。

零配置快速開始

因為一直被吐槽配置太累,加上parcel給的壓力,webpack4也支持零配置打包了。

如果沒有配置文件,會默認以./src/index.js作為entry開始打包。

如果配置了webpack.config.js或者指定了--config 的文件路徑,則依據對應配置文件開始。

問題表現

在webpack.config.js中配置了entry、mode等相關屬性,配置文件如下:

module.export = {  mode:'production',  entry:{    app:'./src/test.js',    index:'./src/test.js'  },  output: {    path: process.cwd() + '/dist',    filename: '[name].[hash].js',    chunkFilename: '[name].[chunkhash].js',    crossOriginLoading: 'anonymous'  },  cache: true,  devtool: 'cheap-source-map',  externals: {    jquery: 'jQuery'  },  module: {    rules: [      {        test: //.(js|jsx)?$/,        include: [          path.resolve(__dirname, "../src")        ],        exclude: [          'node_modules',          path.resolve(__dirname, "../node_modules")        ],        use: [          {            loader: 'babel-loader',            options:{              presets:['es2015']            }           }        ]      }    ]  },  resolve: {    modules: [      'node_modules'    ],    extensions: [".js", ".json", ".jsx", ".css"],  },  devServer: {    proxy: { // proxy URLs to backend development server      '/api': 'http://localhost:3000'    },    contentBase: path.resolve(__dirname, "../dist"),    hot: true,    open:true  },  plugins: [    new CleanWebpackPlugin(['dist']),    new HtmlWebpackPlugin({      title:'test'    }),    new webpack.HotModuleReplacementPlugin()  ]}

package.json命令配置:

"scripts": {  "build": "webpack --config webpack.prod.js" }//執行打包npm run build

發現始終會有上面選擇mode類型的提示,這讓人不能接受,另外提示沒有./src/index.js文件,但是我的配置入口是別的文件,這樣讓人很莫名

ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/****'

本著跟著提示解決問題的原則,少文件那就建一個唄(后來發現這種思維有時候有用,有時候還真要慎重),問題表現雖然一致,實質可能有所不同。

新建之后是可以運行了但是我們的配置文件好像沒起作用,

dist下的打包文件是默認的main.js

而非我們指定的app和index

為了確保進入配置文件,我打了幾個log,竟然都有輸出,說明進去了,這問題就詭異了。

console.log(path.resolve(__dirname, './src')) //輸出正確路徑module.export = {    //*****//  }

版本統一

初步猜想是版本問題,確實也有issue上提到過某些版本存在問題,對照著官方demo鎖定版本之后問題依然存在。

猜測:應該是配置文件存在錯誤

配置檢查

將官方最基本的配置拉進來拷貝進來試了一下,依然存在問題沒能解決。

猜測:本地的環境存在問題,npm,node等版本

查看之后發現版本都是滿足的。

運行demo

將demo拉到本地并啟動,demo正常打包,說明本地環境是ok的。那么問題就明顯了,我的配置文件或者項目搭建有問題,對照著demo的配置項,配置項沒有明顯問題,這樣的話將,配置信息放入到demo中去,修改之后發現起作用,我又重新審視了下我的配置文件,不僅僅局限于配置部分的時候,發現

//我的寫法,這樣webpack拿到的就是undefined了。module.export//別人的demomodule.exports

webpack的兼容處理

webpack會將 webpack --config 傳入的文件與本身默認配置進行merge,保證本身打包不出錯。為了證明我們的推論,將配置文件只剩下output屬性,并加上src/index.js

module.exports = {  output: {    path: process.cwd() + '/dist1',    // 直接的入口模zzz塊名    filename: '[name].js',    // 非入口模塊,也就是不需要打包到一起的,但又可能會用到,    // 這不就是按需加載的么    chunkFilename: '[name].[chunkhash].js',    crossOriginLoading: 'anonymous'  }}

執行之后會發現打包到/dist1下面。所以上面寫錯module.exports的時候,走的完全是默認配置。前面的log打在了module.exports之前執行是正確的。

結尾

當遇到不可思議的問題的時候,建議靜下心看一看,不要盲目搜索,另外最可靠的參考就是官方文檔和實例,注意對比版本和環境,如果都沒問題,那么再去嘗試網上的各種解決方法。

這里總結一下給自己一個記錄,希望解決思路能幫助其他人。也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69视频在线免费观看| 欧美成人免费小视频| 中文在线资源观看视频网站免费不卡| 国产精品欧美日韩久久| 4438全国成人免费| 国产美女91呻吟求| 欧美日韩国产一中文字不卡| 亚洲成人激情在线| 中文国产成人精品久久一| 亚洲美女免费精品视频在线观看| 亚洲精品一区久久久久久| 亚洲精品98久久久久久中文字幕| 日韩美女视频中文字幕| 97国产在线视频| 日韩在线欧美在线| 精品日韩中文字幕| 久久6精品影院| 亚洲偷熟乱区亚洲香蕉av| 日韩中文理论片| 亚洲欧美国产精品专区久久| 精品中文字幕在线| 日本免费在线精品| 国产精品一区二区三区久久久| 日韩中文字幕视频在线观看| 亚洲香蕉伊综合在人在线视看| 欧美在线一区二区视频| 亚洲精品www| 国产激情久久久久| 川上优av一区二区线观看| 一区二区成人av| 成人精品在线视频| 91精品久久久久久久久中文字幕| 欧美性猛交xxxx免费看久久久| 成人激情视频在线观看| 亚洲毛茸茸少妇高潮呻吟| 国产在线拍偷自揄拍精品| 国产精品自产拍在线观看| 国产精品旅馆在线| 亚洲精品久久久久| 91久久在线视频| 在线成人中文字幕| 亚洲字幕在线观看| 91欧美精品成人综合在线观看| 尤物yw午夜国产精品视频明星| 欧美天天综合色影久久精品| 欧美一级在线亚洲天堂| 亚洲日本欧美中文幕| 成人黄色短视频在线观看| 国产精品v日韩精品| 热久久这里只有精品| 日韩hd视频在线观看| 欧美精品免费播放| 久久69精品久久久久久国产越南| 亚洲毛片在线观看| 亚洲最大激情中文字幕| 久久久久久国产免费| 午夜精品久久久久久久99热| 国产日韩欧美夫妻视频在线观看| 国产精品视频久久久久| 欧美日韩中文字幕在线视频| 欧美激情第一页xxx| 搡老女人一区二区三区视频tv| 91在线观看免费高清| 成人精品一区二区三区| 91免费国产网站| 久久国产精品久久精品| 国产精品av电影| 欧洲s码亚洲m码精品一区| 97在线看福利| 国产精品欧美日韩一区二区| 久久久噜噜噜久噜久久| 亚洲毛片在线看| 成人啪啪免费看| 国产精品高潮视频| 国产精品视频精品| 尤物九九久久国产精品的分类| 欧美黑人狂野猛交老妇| 2019国产精品自在线拍国产不卡| 欧美区二区三区| 国产在线视频91| 91精品免费看| 91老司机精品视频| 久久精品中文字幕免费mv| 亚洲护士老师的毛茸茸最新章节| 在线播放国产精品| 亚洲国产高清自拍| 97在线看免费观看视频在线观看| 成人福利在线观看| 久久人人爽国产| 中文字幕亚洲综合久久| 欧美激情视频播放| 中文字幕在线亚洲| 亚洲一区二区三区四区在线播放| 欧美三级欧美成人高清www| 国产精品一区二区av影院萌芽| 亚洲欧洲视频在线| 国产精品色婷婷视频| 最近2019免费中文字幕视频三| 亚洲国产欧美在线成人app| 欧美色道久久88综合亚洲精品| 久久精品男人天堂| 亚洲天堂网在线观看| 精品国产福利在线| 日韩精品亚洲视频| 日韩欧美a级成人黄色| 亚洲成av人片在线观看香蕉| 操91在线视频| 亚洲福利视频专区| 国产精品一区二区在线| 97视频在线观看播放| 久久亚洲精品一区二区| 色视频www在线播放国产成人| 亚洲国产高清高潮精品美女| 在线观看91久久久久久| 久久人体大胆视频| 日韩av电影手机在线观看| 欧美肥老妇视频| 亚洲国产另类 国产精品国产免费| 精品国产91久久久久久| 97在线观看视频| 欧美激情女人20p| 亚洲精品一区二区久| 久久久久久久亚洲精品| 日韩精品丝袜在线| 亚洲美女动态图120秒| 亚洲xxx大片| 欧美中文字幕在线视频| 国内精品久久久久久中文字幕| 国产极品jizzhd欧美| 欧美日本高清视频| 国产精品专区一| 亚洲a成v人在线观看| 美日韩精品免费观看视频| 国产成人av网址| 欧美一区二区.| 欧美另类极品videosbest最新版本| 日韩欧美一区二区三区| 欧美大片欧美激情性色a∨久久| 国产精品wwwwww| 免费91在线视频| 黄色精品在线看| 日本成人精品在线| 主播福利视频一区| 98视频在线噜噜噜国产| 78m国产成人精品视频| 69av在线视频| 国产自产女人91一区在线观看| 欧美黄网免费在线观看| 日韩在线观看成人| 国产一区二区三区精品久久久| 亚洲精品免费av| 精品人伦一区二区三区蜜桃网站| 97视频在线观看网址| 日韩亚洲成人av在线| 中文字幕国产精品| 国产成一区二区| 欧美在线视频导航| 日韩美女写真福利在线观看| 国产精品www网站| 亚洲欧美中文日韩在线v日本| 性夜试看影院91社区| 国产高清在线不卡| 日韩精品极品视频免费观看| www亚洲精品|