webpack3.4.0結(jié)合webpack.wuhaolin.cn學(xué)習(xí)筆記

Webpack,web:網(wǎng)絡(luò),pack:打包

webpack.wuhaolin.cn是一個介紹webpack的網(wǎng)站,這個網(wǎng)站的優(yōu)勢是每節(jié)內(nèi)容都有對應(yīng)的源碼,內(nèi)容也容易理解,學(xué)習(xí)成本低,第1章是大致給你介紹一下webpack,后面內(nèi)容是具體細(xì)化

學(xué)習(xí)這個網(wǎng)站的webpack內(nèi)容時,先翻到每節(jié)底部,如果有源碼,先下載源碼,然后看這節(jié)的內(nèi)容,最后安裝需要的npm包,記住,我們的包的版本要跟網(wǎng)站上提供的源碼里的版本一致,否則可能會報錯

webpack報錯原因主要是版本不兼容

webpack3.8.1在遇到css-loader?minimize會報錯,需要去掉?minimize;而webpack3.4.0不會報錯

extract-text-webpack-plugin,這個插件在webpack4中不支持

如果你用的是webstorm進(jìn)行開發(fā),要在項目里安裝node_modules了,要給node_modules的外面一層文件夾右鍵--》Mark Directory As--》Excluded,如果不做這一步的話,電腦會卡死

安裝webpack-dev-server以后,即使是全局安裝,仍然不能使用webpack-dev-server命令,會報錯:“The CLI moved into a separate package: webpack-cli? ? ? Please install 'webpack-cli' in addition to webpack itself to use the CLI? -> When using npm: npm i -D webpack-cli”,就按照報錯信息來,運行npm i -D webpack-cli來安裝webpack-cli,但是推薦用cnpm,因為速度更快,但是安裝以后再運行‘webpack-dev-server’,報了另外一個錯誤:“throw new Error('invalid "instanceof" keyword value ' + c)”,最后我下載了1.6節(jié)頁面最底部的源碼,刪除node_modules,用網(wǎng)站的源碼,然后cnpm install以后,就正常運行了

1.6節(jié)說讓你執(zhí)行‘webpack-dev-server’,你不要直接在cmd命令行上執(zhí)行‘webpack-dev-server’,要要把命令行放在package.json的

"scripts": {

? ? "build": "webpack-dev-server --hot --devtool source-map"

? }里,運行cnpm run build

構(gòu)建完畢以后,出現(xiàn)的.map后綴名的文件,就是sourcemap文件

entry: ['./main.js', './branch.js'],entry如果是一個數(shù)組,里面有2個js,就會從左往右執(zhí)行

安裝node-sass以后,不能直接執(zhí)行‘node-sass main.scss main.css’,要把‘node-sass main.scss main.css’放在npm script里(比如"node-sass" : "node-sass main.scss main.css"),再執(zhí)行‘cnpm run node-sass’就可以了

問:怎么記憶css-loader/style-loader呢?

答:css-loader的核心是css,也就是處理css代碼的;style-loader的核心是style,是把css插入到<style>標(biāo)簽里的

devtoolModuleFilenameTemplate:

如果想提升項目的性能,可以在webpack.config.js里module.exports下面設(shè)置performance: {

? ? hints: 'warning'

? },這樣,控制臺會輸入一些幫助你提高性能的建議:

問:哪些插件適合全局安裝?

答:希望整個電腦的版本都一致的,就全局安裝,比如node-sass;如果項目1里需要用這個版本,項目2需要用另外一個版本,那么這個插件就適合局部安裝,比如webpack

問:哪些模塊安裝時調(diào)用‘-S’,哪些模塊安裝時調(diào)用‘-D’?

答:‘-S’是把插件放到package.json的dependencies里,‘-D’是把插件放在package.json的devDependencies里,dependencies放生產(chǎn)環(huán)境需要的插件(比如Vue),devDependencies放只需要開發(fā)環(huán)境需要而生產(chǎn)環(huán)境不需要的插件(比如babel-core)

問:復(fù)制網(wǎng)上的一句命令‘npm install –save-dev sass-loader node-sass’,返回給我cnpm的版本,這是怎么回事?

答:原來是–save-dev前面需要2個‘-’,改成‘npm install -–save-dev sass-loader node-sass’

?運行‘cnpm install sass-loader node-sass -S’報錯,然后換成‘cnpm i -D node-sass sass-loader’就安裝成功了,我猜測可能是因為sass-loader依賴node-sass,所以如果前后順序換了就安裝失敗了,應(yīng)該不是‘-S’改成‘-D’所以成功的

在main.js里使用require('style-loader!css-loader?minimize!./main.css');,再在webpack.config.js的module.rules的css文件use: ExtractTextPlugin.extract({

? ? ? ? ? ? ? ? ? ? // 轉(zhuǎn)換 .css 文件需要使用的 Loader

? ? ? ? ? ? ? ? ? ? use: ['css-loader'],

? ? ? ? ? ? ? ? }),

會生成css文件,但是后面會報錯,

把require('style-loader!css-loader?minimize!./main.css');改成require('./main.css');就不報錯了,估計是require里用了一種方式處理css文件,另外又用了一種loader進(jìn)行處理,2種方式同時使用會沖突

如果entry是一個對象,里面有2個入口,那么,output不能放在同一個文件里,也就是說,output里的filename不能寫死,比如如果寫死為'bundle.js',會報錯:Conflict: Multiple assets emit to the same filename bundle.js

頁面里寫require('vue');node就會去node_modules里找vue

問:為什么webpack.config.js和index.html修改了內(nèi)容,項目監(jiān)測不到?

答:http://webpack.wuhaolin.cn/2%E9%85%8D%E7%BD%AE/2-1Entry.html講到了‘entry是配置模塊的入口,可抽象成輸入,Webpack 執(zhí)行構(gòu)建的第一步將從入口開始搜尋及遞歸解析出所有入口依賴的模塊?!鴐ian.js是找不到webpack.config.js和index.html的,所以這2給文件即使修改了,頁面也不會更新

問:3.9節(jié)的demo里有這句npm script‘"build": "NODE_ENV=production webpack"’,結(jié)果報錯了‘'NODE_ENV' 不是內(nèi)部或外部命令,也不是可運行的程序 或批處理文件?!趺唇鉀Q?

答:改成‘"build": "set NODE_ENV=production && webpack"’,原文鏈接:http://www.itdecent.cn/p/d0ea266c8e14

/\.jsx?$/,這表示匹配js的后綴文件或者jsx的后綴文件

關(guān)于‘4-1 縮小文件搜索范圍’的‘優(yōu)化 loader 配置’的這個示例,我的理解是:減少文件夾層數(shù),這樣可以減少讓node所檢查的文件的嵌套層數(shù),類似于js的for循環(huán)層數(shù)減少了,性能就提高了

3.15節(jié)這里出現(xiàn)了‘rsync dist’,以下是我從http://bbs.chinaunix.net/thread-3681210-1-1.html里摘錄的一段話:"rsync是linux系統(tǒng)默認(rèn)帶有的命令,window下沒有的。要在windows上安裝rsync還挺麻煩,需要用到cygwin 之類的在windows上模擬linux環(huán)境才能安裝rsync吧",實際開發(fā)項目里,可以直接把dist文件夾放在服務(wù)器上就行了,不用這么麻煩

關(guān)于3.16這節(jié)內(nèi)容,我覺得webstorm已經(jīng)可以對代碼進(jìn)行語法檢查了,就沒有必要再安裝這些插件了

問:3.19這節(jié),在template.html這里引入圖片,即使用了file-loader進(jìn)行解析,還是沒有效果,為什么?

答:因為main.js獲取不到template.html的代碼,如果想在html里讓圖片被插件解析,可以在js里引入圖片,然后把圖片插入到html里

問:3.19這節(jié)的demo里,webpack.config.js里new WebPlugin的requires的值為什么是['main']?

答:因為entry的值是一個對象,屬性名就是'main',你也可以根據(jù)自己喜好改成其他值,但是entry值的屬性名必須和new WebPlugin的requires值相同

問:為什么template.html里的script標(biāo)簽的src屬性值是app?

答:因為webpack.config.js里的這句話,

entry: {

? ? app: './main.js'// app 的 JavaScript 執(zhí)行入口文件

? },

如果你把這里的app改成app2,就需要把template.html里的script標(biāo)簽的src屬性值改成app2了

package.json的dependencies和devDependencies是按照英文字母的順序進(jìn)行排序的,如果想詳細(xì)了解package.json文件中dependencies和devDependencies的區(qū)別,請閱讀:https://www.cnblogs.com/xumqfaith/p/8073035.html

vue-router按需加載組件的3種方式:vue異步組件、es提案的import()、webpack的require.ensure():https://segmentfault.com/a/1190000011519350

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

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一、webpack介紹 1、由來 ...
    it筱竹閱讀 11,457評論 0 21
  • 本文主要分為:環(huán)境配置使用配置文件CSS 處理ES6 代碼編輯文件壓縮SASS 處理CSS 與 JS 分離文件處理...
    _月光臨海閱讀 563評論 0 1
  • GitChat技術(shù)雜談 前言 本文較長,為了節(jié)省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,887評論 7 110
  • webpack使用學(xué)習(xí) 本分享學(xué)習(xí)借鑒webpack中文官網(wǎng),官網(wǎng)鏈接(中文文檔):https://www.web...
    腿毛怪丶叔叔閱讀 968評論 0 5
  • 父親就是擔(dān)子沒有了,反而很快走了的。怎么這樣說呢?當(dāng)他在和別人家一樣,從土地下放前缺吃缺喝,到土地下放后趕上...
    咫尺為鄰閱讀 236評論 1 1

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