最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Webpack中publicPath路徑問題詳解

 更新時(shí)間:2018年05月03日 10:20:26   作者:Mello_fe  
這篇文章主要介紹了Webpack中publicPath路徑問題詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

最近自己在搭建一個(gè)基于webpack的react項(xiàng)目,遇到關(guān)于output.publicPath和webpack-dev-server中publicPath的問題,而官方文檔對(duì)它們的描述也不是很清楚,所以自己研究了下并寫下本文記錄。

output

output選項(xiàng)指定webpack輸出的位置,其中比較重要的也是經(jīng)常用到的有 path 和 publicPath

output.path

默認(rèn)值: process.cwd()

output.path 只是指示輸出的目錄,對(duì)應(yīng)一個(gè) 絕對(duì)路徑 ,例如在項(xiàng)目中通常會(huì)做如下配置:

output: {
 path: path.resolve(__dirname, '../dist'),
}

output.publicPath

默認(rèn)值:空字符串

官方文檔中對(duì)publicPath的解釋

webpack 提供一個(gè)非常有用的配置,該配置能幫助你為項(xiàng)目中的所有資源指定一個(gè)基礎(chǔ)路徑,它被稱為公共路徑(publicPath)。

而關(guān)于如何應(yīng)用該路徑并沒有說(shuō)清楚...

其實(shí)這里說(shuō)的所有資源的基礎(chǔ)路徑是指項(xiàng)目中引用css,js,img等資源時(shí)候的一個(gè)基礎(chǔ)路徑,這個(gè)基礎(chǔ)路徑要配合具體資源中指定的路徑使用,所以其實(shí)打包后資源的訪問路徑可以用如下公式表示:

靜態(tài)資源最終訪問路徑 = output.publicPath + 資源loader或插件等配置路徑

例如

output.publicPath = '/dist/'

// image
options: {
 name: 'img/[name].[ext]?[hash]'
}

// 最終圖片的訪問路徑為
output.publicPath + 'img/[name].[ext]?[hash]' = '/dist/img/[name].[ext]?[hash]'

// js output.filename
output: {
 filename: '[name].js'
}
// 最終js的訪問路徑為
output.publicPath + '[name].js' = '/dist/[name].js'

// extract-text-webpack-plugin css
new ExtractTextPlugin({
 filename: 'style.[chunkhash].css'
})
// 最終css的訪問路徑為
output.publicPath + 'style.[chunkhash].css' = '/dist/style.[chunkhash].css'

這個(gè)最終靜態(tài)資源訪問路徑在使用html-webpack-plugin打包后得到的html中可以看到。所以 publicPath 設(shè)置成相對(duì)路徑后,相對(duì)路徑是相對(duì)于build之后的index.html的,例如,如果設(shè)置 publicPath: './dist/' ,則打包后js的引用路徑為 ./dist/main.js ,但是這里有一個(gè)問題,相對(duì)路徑在訪問本地時(shí)可以,但是如果將靜態(tài)資源托管到CDN上則訪問路徑顯然不能使用相對(duì)路徑,但是如果將 publicPath 設(shè)置成 / ,則打包后訪問路徑為 localhost:8080/dist/main.js ,本地?zé)o法訪問

所以這里需要在上線時(shí)候手動(dòng)更改 publicPath ,感覺不是很方便,但是不知道該如何解決...

一般情況下 publicPath應(yīng)該以'/'結(jié)尾,而其他loader或插件的配置不要以'/'開頭

webpack-dev-server中的publicPath

點(diǎn)擊查看官方文檔中關(guān)于devServer.publicPath的介紹

在開發(fā)階段,我們借用devServer啟動(dòng)一個(gè)開發(fā)服務(wù)器進(jìn)行開發(fā),這里也會(huì)配置一個(gè) publicPath ,這里的 publicPath 路徑下的打包文件可以在瀏覽器中訪問。而靜態(tài)資源仍然使用 output.publicPath 。

webpack-dev-server打包的內(nèi)容是放在內(nèi)存中的,這些打包后的資源對(duì)外的的根目錄就是 publicPath ,換句話說(shuō),這里我們?cè)O(shè)置的是打包后資源存放的位置

例如:

// 假設(shè)devServer的publicPath為
const publicPath = '/dist/'
// 則啟動(dòng)devServer后index.html的位置為
const htmlPath = `${pablicPath}index.html`
// 包的位置
cosnt mainJsPath = `${pablicPath}main.js`

以上可以直接通過(guò) http://lcoalhost:8080/dist/main.js 訪問到。

通過(guò)訪問 http://localhost:8080/webpack-dev-server 可以得到devServer啟動(dòng)后的資源訪問路徑,如圖所示,點(diǎn)擊靜態(tài)資源可以看到靜態(tài)資源的訪問路徑為 http://localhost:8080${publicPath}index.html

html-webpack-plugin

這個(gè)插件用于將css和js添加到html模版中,其中 template 和 filename 會(huì)受到路徑的影響,從源碼中可以看出

template

作用:用于定義模版文件的路徑

源碼:

復(fù)制代碼 代碼如下:
this.options.template = this.getFullTemplatePath(this.options.template, compiler.context);

因此 template 只有定義在webpack的 context 下才會(huì)被識(shí)別, webpack context的默認(rèn)值為 process.cwd() ,既運(yùn)行 node 命令時(shí)所在的文件夾的絕對(duì)路徑

filename

作用:輸出的HTML文件名,默認(rèn)為index.html,可以直接配置帶有子目錄

源碼:

復(fù)制代碼 代碼如下:
this.options.filename = path.relative(compiler.options.output.path, filename);

所以filename的路徑是相對(duì)于 output.path 的,而在webpack-dev-server中,則是相對(duì)于webpack-dev-server配置的 publicPath 。

如果webpack-dev-server的 publicPath 和 output.publicPath 不一致,在使用html-webpack-plugin可能會(huì)導(dǎo)致引用靜態(tài)資源失敗,因?yàn)樵赿evServer中仍然以 output.publicPath 引用靜態(tài)資源,和webpack-dev-server的提供的資源訪問路徑不一致,從而無(wú)法正常訪問。

有一種情況除外,就是 output.publicPath 是相對(duì)路徑,這時(shí)候可以訪問本地資源

所以一般情況下都要保證devServer中的 publicPath 與 output.publicPath 保持一致。

最后

關(guān)于webpack中的 path 就總結(jié)這么多,在研究關(guān)于webpack路徑的過(guò)程中看查到的一些關(guān)于路徑的零碎的知識(shí)如下:

斜杠/的含義

配置中/代表url根路徑,例如http://localhost:8080/dist/js/test.js中的http://localhost:8080/

devServer.publicPath & devServer.contentBase

  1. devServer.contentBase 告訴服務(wù)器從哪里提供內(nèi)容。只有在你想要提供靜態(tài)文件時(shí)才需要。
  2. devServer.publicPath 將用于確定應(yīng)該從哪里提供 bundle,并且此選項(xiàng)優(yōu)先。

node中的路徑

  1. __dirname: 總是返回被執(zhí)行的 js 所在文件夾的絕對(duì)路徑
  2. __filename: 總是返回被執(zhí)行的 js 的絕對(duì)路徑
  3. process.cwd(): 總是返回運(yùn)行 node 命令時(shí)所在的文件夾的絕對(duì)路徑

參考

詳解Webpack2的那些路徑
webpack 公共路徑(Public Path)
devServer.publicPath
淺析 NodeJs 的幾種文件路徑

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • uni-app入門頁(yè)面布局之window和tabbar詳解

    uni-app入門頁(yè)面布局之window和tabbar詳解

    每個(gè)頁(yè)面按照結(jié)構(gòu)可以分成三部分:window?page?tabbar.其中window和tabbar一般比較固定,page是平常業(yè)務(wù)開展的主要載體,根據(jù)業(yè)務(wù)需求進(jìn)行頁(yè)面配置。下面主要講一下window和tabbar,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • 使用JavaScript實(shí)現(xiàn)alert的實(shí)例代碼

    使用JavaScript實(shí)現(xiàn)alert的實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家介紹了js實(shí)現(xiàn)alert的方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-07-07
  • JS實(shí)現(xiàn)搜索框文字可刪除功能

    JS實(shí)現(xiàn)搜索框文字可刪除功能

    本文給大家分享一段js代碼實(shí)現(xiàn)搜索框文字可刪除功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2016-12-12
  • JavaScript中事件冒泡機(jī)制示例詳析

    JavaScript中事件冒泡機(jī)制示例詳析

    這篇文章主要給大家介紹了關(guān)于JavaScript中事件冒泡機(jī)制的相關(guān)資料,文中詳析介紹了什么是冒泡、冒泡捕獲需要以及冒泡和捕獲的具體區(qū)別,需要的的朋友可以參考下
    2021-06-06
  • 簡(jiǎn)單實(shí)現(xiàn)bootstrap導(dǎo)航效果

    簡(jiǎn)單實(shí)現(xiàn)bootstrap導(dǎo)航效果

    這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)bootstrap導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 詳談js中標(biāo)準(zhǔn)for循環(huán)與foreach(for in)的區(qū)別

    詳談js中標(biāo)準(zhǔn)for循環(huán)與foreach(for in)的區(qū)別

    下面小編就為大家?guī)?lái)一篇詳談js中標(biāo)準(zhǔn)for循環(huán)與foreach(for in)的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • JavaScript實(shí)現(xiàn)隨機(jī)點(diǎn)名器實(shí)例詳解

    JavaScript實(shí)現(xiàn)隨機(jī)點(diǎn)名器實(shí)例詳解

    這篇文章主要介紹了JavaScript隨機(jī)點(diǎn)名器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JavaScript

    JavaScript"模擬事件"的注意要點(diǎn)詳解

    今天小編就為大家分享一篇關(guān)于JavaScript"模擬事件"的注意要點(diǎn)詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • JS實(shí)現(xiàn)拼圖游戲

    JS實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 微信小程序報(bào)錯(cuò):does?not?have?a?method?"xxxx"?to?handle?event?"tap"的解決方案

    微信小程序報(bào)錯(cuò):does?not?have?a?method?"xxxx"?to?ha

    這篇文章主要給大家介紹了關(guān)于微信小程序報(bào)錯(cuò):does?not?have?a?method?"xxxx"?to?handle?event?"tap"的解決方案,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評(píng)論

宁海县| 裕民县| 灯塔市| 邢台市| 庐江县| 莱芜市| 鹤峰县| 五华县| 循化| 原平市| 东阳市| 鄂尔多斯市| 保靖县| 苗栗市| 醴陵市| 开原市| 信阳市| 柏乡县| 金湖县| 滁州市| 精河县| 临泉县| 临颍县| 板桥市| 鸡西市| 疏附县| 上虞市| 凤庆县| 林西县| 姜堰市| 龙口市| 龙山县| 天台县| 开封市| 赣州市| 新沂市| 肥西县| 舞钢市| 琼结县| 柞水县| 亚东县|