webpack 使用入門

node安裝就自行百度吧!

確保你已經(jīng)進(jìn)入項(xiàng)目根目錄版扩,npm init 創(chuàng)建 package.json 文件?

webpack安裝可以全局安裝也可以本地安裝:

全局安裝:npm install -g webpack

本地安裝:npm install webpack --save/--save-dev

簡寫方式 : npm i webpack -D

# –save:模塊名將被添加到dependencies,可以簡化為參數(shù)-S信峻。

# –save-dev: 模塊名將被添加到devDependencies十拣,可以簡化為參數(shù)-D羹唠。

配置webpack.config.js文件

const path = require('path');

module.exports = {

? ? entry:'入口文件',

? ? output:{

????????path:path.resolve(__dirname,'./dist'),? ?//出口文件目錄?

? ? ? ? filename:'bundle.js'? ? ? //出口文件名稱

????}

}


多入口文件名的問題時(shí),我們使用了[name]來根據(jù)入口文件自動(dòng)生成文件名健田。(多入口文件格式為對(duì)象{--烛卧,---,--})

多入口文件名的問題時(shí)妓局,我們使用了[name]來根據(jù)入口文件自動(dòng)生成文件名总放。

除了[name]之外,我們往往需要給文件名增加[hash]值來解決緩存的問題(即代碼更新后好爬,由于文件名的不同局雄,強(qiáng)制用戶下載最新的代碼)。

filename:'dist.[hash].js'

使用[hash]時(shí)存炮,這里的hash值炬搭,即使文件沒有改變,每次生成的結(jié)果也不同穆桂。

如果想讓模塊沒有改變時(shí)宫盔,hash值不改變,那么應(yīng)該使用[chunkhash]替代[hash]充尉。

chunk表示模塊飘言,chunkhash就是指根據(jù)模塊內(nèi)容計(jì)算出來的哈希值。

模板描述特點(diǎn)

[hash]? ? ? ? ? ? ? 模塊標(biāo)識(shí)符(module identifier)的hash? ? ? ? ? ? 每次都不同(低版本webpack可能有問題)

[chunkhash]? ? ?chunk 內(nèi)容的 hash? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 模塊內(nèi)容不變驼侠,hash值不變(不能和hash同時(shí)使用)

[name]? ? ? ? ? ? ?模塊名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?就是entry的key姿鸿,單入口縮寫寫法默認(rèn)是main

[id]? ? ? ? ? ? ? ? ? ? ? ?模塊標(biāo)識(shí)符(module identifier)? ? ? ? ? ? ? ? ? ? ? ? 默認(rèn)情況下是例如'0','1'之類

[query]? ? ? ? ? 模塊的 query倒源,例如苛预,文件名 ?? 后面的字符串? ? ? ? ? ? ? 我也沒搞懂這個(gè)

filename:'dist.chunkhash=[chunkhash:10].name=[name].id=[id].js'

啟用了?[hash]?和?[chunkhash]?占位符。這個(gè)占位符笋熬,會(huì)根據(jù)哈希值热某,在打包好的js文件的文件名中,添加一段hash值胳螟。

而這個(gè)hash值顯然是不可預(yù)期的昔馋,如果我們每次都在html里手動(dòng)去寫這些js文件名,不僅傻糖耸,還容易漏和犯錯(cuò)秘遏。

解決步驟:

webpack不能全局安裝(雖然也可以,但是會(huì)造成污染)嘉竟,因此我們先在當(dāng)前文件夾下安裝一次webpack:npm install --save webpack邦危;

我們還需要安裝一個(gè)webpack插件:npm install --save-dev html-webpack-plugin洋侨;

除此之外,我們需要配置一下webpack文件倦蚪。做兩件事:1希坚、引入插件;2陵且、配置插件裁僧;

//webpack.config.js

//引入插件

constHtmlWebpackPlugin=require('html-webpack-plugin');

module.exports={

//入口文件,指向app.js

entry:'./app.js',//

出口文件

output:{? ? ? ??

path:__dirname+'/dist',? ? ? ?

?filename:'dist.chunkhash=[chunkhash:10].name=[name].id=[id].js

'},

//將插件添加到webpack中

plugins:[

//這里是添加的插件

newHtmlWebpackPlugin({? ? ? ? ? ??

title:'My HTML'})? ??

]}

最后滩报,如之前一樣锅知,運(yùn)行npm run test,會(huì)發(fā)現(xiàn)在dist文件夾下脓钾,除了之前的js文件售睹,還出現(xiàn)了一個(gè)html文件,而這個(gè)html文件引入了我們打包好的js文件可训。

解決一個(gè)常見需求:

我通過CDN引入jQuery(或其他類似資源)昌妹;

并且該資源可能是一個(gè),或者多個(gè)握截;

或者是其他已經(jīng)寫在html里的文件內(nèi)容飞崖;

我不想在自動(dòng)打包好html后,再去手動(dòng)插入script標(biāo)簽或者其他類似標(biāo)簽谨胞;

因此我希望以某個(gè)html文件為模板固歪,額外加入打包好的js文件;

因此我們需要對(duì)這個(gè)插件進(jìn)行配置:[HtmlWebpackPlugin的文檔(英文)](https://github.com/jantimon/html-webpack-plugin#configuration)

對(duì)于這個(gè)需求胯努,我們只需要配置一些簡單的東西:

plugins:[

//這里是添加的插件

newHtmlWebpackPlugin({? ? ? ??

title:'title',//html的title(就是title標(biāo)簽里的東西)

filename:'index.html',//重寫后的html文件名牢裳,默認(rèn)是index.html

template:'./demo.html',//這個(gè)就是那個(gè)模板文件,不會(huì)改動(dòng)原有的內(nèi)容叶沛,而是在原來html文件的末尾蒲讯,將打包編譯好的文件添加進(jìn)去

})]


使用ES6規(guī)范的js代碼,轉(zhuǎn)為ES5灰署。(https://github.com/qq20004604/webpack-study/tree/master/5%E3%80%81Loader/babel_loader)

npm install --save babel-loader babel-core babel-preset-env webpack

但是判帮,這個(gè)只能轉(zhuǎn)一些普通的es6語法,像例如Promise溉箕、Set之類的晦墙,他是無法轉(zhuǎn)換的。

如果想要轉(zhuǎn)換這些肴茄,我們需要做一些額外的工作晌畅。

首先安裝插件

npm install? babel-runtime? --save

npm install? babel-plugin-transform-runtime? --save-dev

babel-runtime(也就是上面plugins數(shù)組中的transform-runtime),解決了輔助代碼(即讓我們可以使用新特性的代碼)被默認(rèn)添加到每一個(gè)需要他的文件的問題(這會(huì)導(dǎo)致文件過大)独郎。

具體解決方法是禁用了babel對(duì)每個(gè)文件的runtime注入踩麦,引入?babel-plugin-transform-runtime?并且使所有輔助代碼從這里引用。

表現(xiàn)效果:假如A模塊異步加載B模塊氓癌,A谓谦、B模塊里都使用了Set,那么為了使A模塊正常運(yùn)行贪婉,引入了某些代碼反粥。然后因?yàn)锽模塊又是被A模塊引入的,那么B模塊在被加載的時(shí)候疲迂,A模塊里已經(jīng)引入的代碼才顿,就沒必要再次引入了,所以B模塊里是不存在A模塊引入的那些兼容代碼的尤蒿。

不使用?.babelrc?文件郑气,而是直接寫在babel-loader里。

module: {

? ? // loader放在rules這個(gè)數(shù)組里面? ? rules: [

? ? ? ? {

? ? ? ? ? ? test: /\.js$/,

? ? ? ? ? ? exclude: /node_modules/,

? ? ? ? ? ? loader: 'babel-loader',

? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? presets: ['babel-preset-env'],

? ? ? ? ? ? ? ? plugins: ['transform-runtime']

? ? ? ? ? ? }

? ? ? ? }

? ? ]

}

module: {

? ? // loader放在rules這個(gè)數(shù)組里面? ? rules: [

? ? ? ? {

? ? ? ? ? ? test: /\.js$/,

? ? ? ? ? ? exclude: /node_modules/,

? ? ? ? ? ? // 區(qū)別在這里? ? ? ? ? ? use: {

? ? ? ? ? ? ? ? loader: 'babel-loader',

? ? ? ? ? ? ? ? options: {

? ? ? ? ? ? ? ? ? ? presets: ['babel-preset-env'],

? ? ? ? ? ? ? ? ? ? plugins: ['transform-runtime']

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ]

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腰池,一起剝皮案震驚了整個(gè)濱河市尾组,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌示弓,老刑警劉巖讳侨,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奏属,居然都是意外死亡跨跨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門囱皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勇婴,“玉大人,你說我怎么就攤上這事铆帽∨毓ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵爹橱,是天一觀的道長萨螺。 經(jīng)常有香客問我,道長愧驱,這世上最難降的妖魔是什么慰技? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮组砚,結(jié)果婚禮上吻商,老公的妹妹穿的比我還像新娘。我一直安慰自己糟红,他們只是感情好艾帐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布乌叶。 她就那樣靜靜地躺著,像睡著了一般柒爸。 火紅的嫁衣襯著肌膚如雪准浴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天捎稚,我揣著相機(jī)與錄音乐横,去河邊找鬼。 笑死今野,一個(gè)胖子當(dāng)著我的面吹牛葡公,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播条霜,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼催什,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了蛔外?” 一聲冷哼從身側(cè)響起蛆楞,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夹厌,沒想到半個(gè)月后豹爹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矛纹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年臂聋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片或南。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孩等,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出采够,到底是詐尸還是另有隱情肄方,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布蹬癌,位于F島的核電站权她,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逝薪。R本人自食惡果不足惜隅要,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望董济。 院中可真熱鬧步清,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谴轮,卻和暖如春狂巢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背书聚。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藻雌,地道東北人雌续。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像胯杭,于是被迫代替她去往敵國和親驯杜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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