webpack踩坑之路

  1. webpack+babel常用包和插件

  2. 沒有設(shè)置repositorydescription

    npm WARN demo@1.0.0 No description 
    npm WARN demo@1.0.0 No repository field.
    

    會(huì)有兩個(gè)warn穿剖,就是說沒有repository和description听隐,也就是說缺少項(xiàng)目的基本描述文件和倉庫字段,一般團(tuán)隊(duì)合作時(shí)會(huì)用到苛茂,比如git倉庫和readme菜职,設(shè)置了就不會(huì)有警報(bào)了肴盏,當(dāng)然也可以在package.json中添加"private": true選項(xiàng)表示這是私人的燕鸽,這樣也不會(huì)有警報(bào)

  3. 另外兩個(gè)warn

    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):
    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} 
    (current: {"os":"win32","arch":"x64"})
    

    這是因?yàn)檫@個(gè)fsevents依賴是個(gè)可選的依賴包闪彼,只有項(xiàng)目運(yùn)行環(huán)境是mac OS時(shí)才會(huì)使用婿滓,所以在windows和linux下會(huì)報(bào)這個(gè)warn老速,無關(guān)緊要。

    It occurs because fsevents is an optional dependency, used only when project is run on macOS environment (the package provides 'Native Access to Mac OS-X FSEvents').
    And since you're running your project on Windows, fsevents is skipped as irrelevant.

  4. 沒有設(shè)置mode

    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.
    

    沒有指明模式凸主,只需要在package.json文件的scripts選項(xiàng)下的命令后加上--mode development或者--mode production來指明是開發(fā)環(huán)境還是生產(chǎn)環(huán)境就行

  5. extract-text-webpack-plugin插件不支持webpack4

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

    需要用最新版的(Beta測(cè)試版)的extract-text-webpack-plugin橘券,在后面加上@next即可,即npm install extract-text-webpack-plugin@next

  6. babel-preset-es2015逐漸被廢棄卿吐,不建議使用

    Babel now has a better preset that we recommend you use instead: npm install babel-preset-env --save-dev
    

    換用babel-preset-env就行旁舰,注意env后面不要加@next,否則會(huì)安裝Beta7.0的版本嗡官,這樣的話就會(huì)導(dǎo)致babel版本不一樣箭窜,會(huì)報(bào)錯(cuò):

    TypeError: Cannot read property 'loose' of undefined
    

    babel-preset-es2015遷移到babel-preset-env也很方便,只需要把原先的babel-preset-es2015uninstall掉再裝上babel-preset-env衍腥,再把.babelrc文件中的"presets":["es2015"]改成"presets":["env"]就行

  7. vue-loaderv15.0+版本的問題

    vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.
    

    在15.0+版本的vue-loader中磺樱,會(huì)報(bào)上面的錯(cuò)誤,即15.0以上版本的vue-loader需要一個(gè)插件婆咸,解決方法是把vue-loader換成15.0版本以下的或者裝上插件竹捉,也很簡(jiǎn)單,在webpack.config.js中添加插件:

    var VueLoaderPlugin = require('vue-loader/lib/plugin');
    
    //...
    plugins: [
        // make sure to include the plugin for the magic
        new VueLoaderPlugin()
        // ...
    ]
    //...
    
  8. webpack4中廢棄了webpack.optimize.UglifyJsPlugin

    Error: webpack.optimize.UglifyJsPlugin has been removed, please use config.optimization.minimize instead.
    

    這是因?yàn)樵谏a(chǎn)環(huán)境打包時(shí)擅耽,壓縮js時(shí)用到了

    new webpack.optimize.UglifyJsPlugin({
        compress:{  
           warnings:false
        }
    })
    

    但是在webpack4中,廢棄了之前的webpack.optimize.UglifyJsPlugin的用法物遇,所以會(huì)報(bào)上面的錯(cuò)誤。解決方法是:

    1. 用npm安裝uglifyjs-webpack-plugin插件,npm install --save-dev uglifyjs-webpack-plugin
    2. 將其引入:let UglifyJsPlugin=require('uglifyjs-webpack-plugin')
    3. 刪除以前的寫法闸餐,將optimization選項(xiàng)與plugins選項(xiàng)并排寫在一起闸迷,注意,是并排班巩,而不是像以前一樣寫在plugins里面。
    let UglifyJsPlugin = require('uglifyjs-webpack-plugin');
    
    //...
    plugins:[
        //...
    ],
    optimization: {
        minimizer: [
          new UglifyJsPlugin({
            uglifyOptions: {
              compress: false,
            }
          })
        ]
    }
    //...
    

    注意optimization選項(xiàng)不要寫到plugins選項(xiàng)里面

  9. Refused to apply style from 'http://localhost:8080/dist/main.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

  10. webpackwebpack-dev-server的區(qū)別

    1. webpack只是構(gòu)建項(xiàng)目,webpack-dev-server除了構(gòu)建項(xiàng)目還提供web服務(wù)训裆,即給本地開發(fā)提供了一個(gè)服務(wù)器(一個(gè)小型的Node.js Express服務(wù)器)。
    2. webpack.config.js的路徑參數(shù):entry都是一樣的蜀铲,即需要知道要構(gòu)建打包的文件在哪里边琉,區(qū)別在于output,webpack打包之后會(huì)將輸出文件放于output指定的路徑,是真是的物理地址记劝,而webpack-dev-server則是將輸出文件放在內(nèi)存中变姨,僅供開發(fā)時(shí)使用,一旦關(guān)閉服務(wù)器打包之后的文件就會(huì)消失厌丑。

    從上面可以看出定欧,webpack-dev-server用于開發(fā)環(huán)境下,修改后內(nèi)存中的文件可以動(dòng)態(tài)更新怒竿,而webpack用于生產(chǎn)環(huán)境下砍鸠,修改之后想要更新必須重新構(gòu)建。

  11. Webpack——解決疑惑,讓你明白

  12. package.jsonpackage-lock.json的區(qū)別

  13. 在配置了babel+webpack的環(huán)境之后耕驰,無法使用展開/收集云算法(就是...運(yùn)算符)爷辱,會(huì)報(bào)錯(cuò)Unexpected token,這是因?yàn)闆]有指明ES6的stage,...運(yùn)算符是stage-4的語法耍属,需要在.babelrc文件中進(jìn)行preset配置:

    "presets": [
        // ...
        "stage-2"
        // ...
    ],
    

    指明一個(gè)小于等于stage-4的stage托嚣,同時(shí)需要本地安裝對(duì)應(yīng)的stage包,如npm install --save-dev babel-preset-stage-2厚骗,否則會(huì)報(bào)錯(cuò)

    Error: Couldn't find preset "stage-2" relative to directory ...
    

    對(duì)于stage示启,詳細(xì)說明如下:

    preset stage-0其實(shí)包含了stage-[1-3],裝了0领舰,其他三個(gè)默認(rèn)就裝了夫嗓,不需要重復(fù)安裝,因?yàn)樗瑂tage-1冲秽,stage-2以及stage-3的所有功能舍咖。另外,[0-3]是代表了不同階段锉桑,但0是代表剛開始討論排霉,而3是代表快要成為標(biāo)準(zhǔn)規(guī)范了,切忌搞混民轴。在進(jìn)行實(shí)際開發(fā)時(shí)攻柠,可以更具需要來設(shè)置對(duì)應(yīng)的stage球订。如果省事懶得折騰,一般設(shè)置為stage-0即可瑰钮。如果為了防止開發(fā)人員使用某些太新的功能冒滩,我們可以限制到某個(gè)特定的stage。更詳細(xì)浪谴、更專業(yè)一點(diǎn)的介紹如下:

    stage3包含以下兩個(gè)插件:

    • transform-async-to-generator
    • transform-exponentiation-operator

    stage2包含stage3的所有插件开睡,額外還有以下插件:

    • syntax-trailing-function-commas
    • transform-object-reset-spread

    stage1包含stage2所有插件,額外還有以下插件:

    • transform-class-constructor-call (Deprecated)
    • transform-class-properties
    • transform-decorators – disabled pending proposal update
    • transform-export-extensions

    stage0包含stage1所有插件苟耻,額外還有以下插件:

    • transform-do-expressions
    • transform-function-bind
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末篇恒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梁呈,更是在濱河造成了極大的恐慌婚度,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官卡,死亡現(xiàn)場(chǎng)離奇詭異蝗茁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寻咒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門哮翘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毛秘,你說我怎么就攤上這事饭寺。” “怎么了叫挟?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵艰匙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我抹恳,道長(zhǎng)员凝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任奋献,我火速辦了婚禮健霹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓶蚂。我一直安慰自己糖埋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布窃这。 她就那樣靜靜地躺著瞳别,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祟敛,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天倍奢,我揣著相機(jī)與錄音,去河邊找鬼垒棋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛痪宰,可吹牛的內(nèi)容都是我干的叼架。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼衣撬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乖订!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起具练,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤乍构,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扛点,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哥遮,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年陵究,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眠饮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铜邮,死狀恐怖仪召,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情松蒜,我是刑警寧澤扔茅,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站秸苗,受9級(jí)特大地震影響召娜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜难述,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一萤晴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胁后,春花似錦店读、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春殖演,著一層夾襖步出監(jiān)牢的瞬間氧秘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工趴久, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丸相,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓彼棍,卻偏偏與公主長(zhǎng)得像灭忠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子座硕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容