你一定能看懂的關(guān)于 devServer.publicPath忍些、output.publicPath 和 output.path 的意義的闡述

經(jīng)過(guò)一番測(cè)試鲁猩,終于猜出了這幾個(gè)字段合乎我測(cè)試結(jié)果的意義,暫時(shí)解決了它們給我?guī)?lái)的困惑罢坝,我打算先從 devServer.publicPath 這個(gè)字段說(shuō)起廓握,這樣我覺(jué)得比較好講明白一點(diǎn)兒,然后再說(shuō) output.publicPath 這個(gè)牽扯部分稍微多一點(diǎn)的字段嘁酿,最后以最簡(jiǎn)單的 output.path 收尾隙券。

devServer.publicPath

我們知道 devServer 這個(gè)字段只在 development 環(huán)境下有效,所以涉及到此字段的都是在 development 模式下闹司。根據(jù)官方文檔是尔,這個(gè)字段的值是一個(gè)字符串,默認(rèn)值為 '/'开仰,它表示 devServer 這個(gè)服務(wù)器在以 contentBase 為根路徑的基礎(chǔ)上在 publicPath 這個(gè)路徑上對(duì)外提供開(kāi)發(fā)過(guò)程中 webpack 構(gòu)建的文件拟枚,比如有一個(gè)文件名字是 vendor.dll.js,假定此時(shí) devServer 跑在 http://localhost:8080 上众弓,若我們不設(shè)置 devServer.publicPath 字段恩溅,同時(shí)也不要設(shè)置 output.path 字段的值(至于為什么,稍后會(huì)說(shuō)到)谓娃,那么我們?cè)L問(wèn) http://localhost:8080/vendor.dll.js 就可以訪問(wèn)到這個(gè) js 文件脚乡,如圖:

image.png

如果設(shè)置 devServer.publicPath 字段的值為 '/lalala/' 那么我們?cè)L問(wèn) http://localhost:8080/lalala/vendor.dll.js 就可以訪問(wèn)到該文件:

image.png

所以,這個(gè)字段的意義應(yīng)該明晰了滨达,即決定外部能夠以什么樣的路徑訪問(wèn)到構(gòu)建的文件奶稠。

值得一提的是,devServer 構(gòu)建的文件是在內(nèi)存里的捡遍,而非你電腦的磁盤(pán)上锌订,但是如果內(nèi)存中找不到想要的文件時(shí)画株,devServer 會(huì)根據(jù)文件的路徑嘗試去電腦的磁盤(pán)上找蜈项,如果這樣還找不到才會(huì) 404侥衬。所以如果我們把 devServer.contentBase 設(shè)置成 production 環(huán)境的 build 的目錄時(shí),那么如果這個(gè)目錄上存在文件,這個(gè)文件就可以在 devServer 開(kāi)啟時(shí)通過(guò)對(duì)應(yīng)的路徑去訪問(wèn)漂佩。比如我現(xiàn)在 build/static/media 下存在 timg.fbfdb0cd.1.jpeg 這樣一個(gè)文件,那么在我們把 devServer.contentBase 設(shè)置為 build 后,通過(guò) devServer 訪問(wèn) http://localhost:8080/static/media/timg.fbfdb0cd.1.jpeg 就可以得到該圖片:

image.png

是一只柴犬。當(dāng)然,通過(guò)一個(gè)服務(wù)器按照對(duì)應(yīng)路徑找到這只柴犬是必然的事情,這里突出的重點(diǎn)是往果,如果開(kāi)發(fā)時(shí)在內(nèi)存和 contentBase 下真實(shí)的磁盤(pán)路徑中存在著同樣文件名的文件,那么 devServer 返回的是內(nèi)存的那個(gè)馍迄。

output.publicPath

這里也是一個(gè) publicPath暴凑,那么肯定會(huì)想凯傲,這與上面的 devServer.publicPath 有關(guān)系嗎灸促?答案是:有荒叼。就像上面說(shuō)的 devServercontentBase 下真實(shí)的磁盤(pán)里的文件當(dāng)做內(nèi)存中文件的備胎一樣,devServer 也把 output.publicPath 當(dāng)做 devServer.publicPath 的備胎球碉。就是說(shuō)法精,如果后者辽装,沒(méi)有顯式設(shè)定值丰涉,那么 devServer 就會(huì)嘗試去讀取前者的值,如果前者顯式設(shè)定了值冠骄,那么就用前者的值,否則就用 devServer.publicPathdefault 值,也就是 '/'择克;這就是我上面說(shuō)的那會(huì)兒提到的在測(cè)試devServer.public的作用時(shí)不要給 output.publicPath 設(shè)值。那我們現(xiàn)在可以來(lái)看看只給 output.publicPath 設(shè)值而不給 devServer.publicPath 設(shè)值會(huì)發(fā)生什么前普,比如設(shè)定 output.publicPath: /kakaka/

image.png

再看看同時(shí)給二者設(shè)定值會(huì)發(fā)生什么肚邢,比如設(shè)定 devServer.publicPath: /lalala/output.publicPath: /kakaka/
image.png

但是拭卿,這兩個(gè)值設(shè)置成不一樣會(huì)導(dǎo)致其他的問(wèn)題骡湖,如圖:
image.png

地址欄訪問(wèn)到的是 http://localhost:8080/lalala/index.html 但是這個(gè) html 里的 script 標(biāo)簽以及一些其他的資源的前綴都是 'kakaka',也就是說(shuō)是以 output.publicPath 為準(zhǔn)的峻厚,這就不得不提到 output.publicPath 的其他功能了:其實(shí)它不止是 devServer.publicPath 的備胎响蕴,更是其他的眾多 loader 和 plugin 的備胎或者參考標(biāo)準(zhǔn),比如 html-webpack-plugin 應(yīng)該就是倚仗 output.publicPath 為構(gòu)建的文件決定的滿(mǎn)足特定需求的前綴來(lái)生成最終的文件訪問(wèn)路徑給 inject 到對(duì)應(yīng)的 html 模板中的惠桃。至于 webpack 對(duì)這個(gè)前綴要求的規(guī)則浦夷,webpack 官網(wǎng)教程里「配置」那一欄的 output.publicPath 就列的比較詳細(xì)了。另外辜王,這個(gè)字段的 default 值是一個(gè)空字符串 ''劈狐,如果沒(méi)有特殊需求就設(shè)置 output.publicPath: '/' 好了。而且呐馆,如果可以的話(huà)肥缔,其他要用到這個(gè)字段的「東西」,最好不要把這個(gè)字段當(dāng)初備胎汹来,而把他當(dāng)成唯一续膳,這樣應(yīng)該會(huì)避免類(lèi)似上面那樣把兩個(gè) publicPath 字段的值設(shè)置成不一致而導(dǎo)致的問(wèn)題改艇。

總結(jié)

哎?是不是忘了什么坟岔?嗯谒兄,output.path 這個(gè)字段其實(shí)沒(méi)什么好說(shuō)的,它的意義應(yīng)該不用再贅述了炮车,實(shí)際上它只在 production 配置下有效舵变,如果你去試一下的話(huà)酣溃,你會(huì)發(fā)現(xiàn)在 development 配置下瘦穆,無(wú)論你給把它配置成什么值(前提必須是一個(gè)合規(guī)的絕對(duì)地址),它都不會(huì)對(duì)你訪問(wèn)開(kāi)發(fā)時(shí)構(gòu)建在內(nèi)存中的文件產(chǎn)生影響赊豌,所以 development 配置下宁舰,直接忽略就好了倔韭。另外,它的 default 值是 path.resolve(__dirname, './dist')

總而言之多艇, devServer.publicPath 的意義就是決定外部能以怎樣的路徑通過(guò) devServer來(lái)訪問(wèn)構(gòu)建在內(nèi)存中的文件,這個(gè)字段未顯式設(shè)定時(shí)二跋,則會(huì)去沿用 output.publicPath 字段的顯式值(如果有的話(huà)木人,否則就用自己的 default 值)。output.publicPath 的意義是用來(lái)為構(gòu)建的文件生成滿(mǎn)足特定需求的前綴钠绍,并將這個(gè)前綴提供給需要的 resolver舆声、plugin 或者其他的配置字段

上面就是關(guān)于這兩個(gè)讓人光看 webpack 官網(wǎng)教程不一定能搞清楚其意義和用法的字段的總結(jié)柳爽,需要注意的是媳握,這個(gè)總結(jié)不一定靠譜,因?yàn)樗⒉皇浅鲎苑喸创a(想翻過(guò)磷脯,太多了蛾找,不知道從何看起)之后的理論證實(shí),只是在控制變量之后的再組合變量的多次測(cè)試猜想規(guī)律歸納而得赵誓。不過(guò)打毛,至少他目前能解決我自己的困惑,所以俩功,希望也能幫到有類(lèi)似困惑的你幻枉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绑雄,隨后出現(xiàn)的幾起案子展辞,更是在濱河造成了極大的恐慌,老刑警劉巖万牺,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罗珍,死亡現(xiàn)場(chǎng)離奇詭異洽腺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)覆旱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)蘸朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扣唱,你說(shuō)我怎么就攤上這事藕坯。” “怎么了噪沙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵炼彪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我正歼,道長(zhǎng)辐马,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任局义,我火速辦了婚禮喜爷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萄唇。我一直安慰自己檩帐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布另萤。 她就那樣靜靜地躺著湃密,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仲墨。 梳的紋絲不亂的頭發(fā)上勾缭,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音目养,去河邊找鬼俩由。 笑死,一個(gè)胖子當(dāng)著我的面吹牛癌蚁,可吹牛的內(nèi)容都是我干的幻梯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼努释,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碘梢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起伐蒂,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤煞躬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體恩沛,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡在扰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雷客。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芒珠。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖搅裙,靈堂內(nèi)的尸體忽然破棺而出皱卓,到底是詐尸還是另有隱情,我是刑警寧澤部逮,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布娜汁,位于F島的核電站,受9級(jí)特大地震影響甥啄,放射性物質(zhì)發(fā)生泄漏存炮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一蜈漓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宫盔,春花似錦融虽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至彼绷,卻和暖如春巍佑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寄悯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工萤衰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猜旬。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓脆栋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親洒擦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椿争,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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