webpack--配置output

Output

output 配置如何輸出最終想要的代碼午磁。 output 是一個 object ,里面包含一系列配置項浸赫,下面分別介紹它們绘沉。

filename

output.filename 配置輸出文件的名稱,為string 類型岂昭。 如果只有一個輸出文件,則可以把它寫成靜態(tài)不變的:

filename: 'bundle.js'

但是在有多個 Chunk 要輸出時狠怨,就需要借助模版和變量了约啊。前面說到 Webpack 會為每個 Chunk取一個名稱,可以根據(jù) Chunk 的名稱來區(qū)分輸出的文件名:

filename: '[name].js'

代碼里的 [name] 代表用內(nèi)置的 name 變量去替換 [name] 佣赖,這時你可以把它看作一個字符串模塊函數(shù)恰矩, 每個要輸出的 Chunk 都會通過這個函數(shù)去拼接出輸出的文件名稱。

內(nèi)置變量除了 name 還包括:

變量名 含義
id Chunk 的唯一標識憎蛤,從0開始
name Chunk 的名稱
hash Chunk 的唯一標識的 Hash 值
chunkhash Chunk 內(nèi)容的 Hash 值

其中 hashchunkhash 的長度是可指定的外傅, [hash:8] 代表取8位 Hash 值,默認是20位俩檬。

注意 ExtractTextWebpackPlugin 插件是使用 contenthash 來代表哈希值而不是 chunkhash萎胰, 原因在于 ExtractTextWebpackPlugin 提取出來的內(nèi)容是代碼內(nèi)容本身而不是由一組模塊組成的 Chunk。

chunkFilename

output.chunkFilename 配置無入口的 Chunk 在輸出時的文件名稱棚辽。 chunkFilename 和上面的 filename 非常類似技竟,但 chunkFilename 只用于指定在運行過程中生成的 Chunk 在輸出時的文件名稱。 常見的會在運行時生成 Chunk 場景有在使用 CommonChunkPlugin屈藐、使用 import('path/to/module') 動態(tài)加載等時榔组。 chunkFilename 支持和 filename 一致的內(nèi)置變量。

path

output.path 配置輸出文件存放在本地的目錄联逻,必須是 string 類型的絕對路徑搓扯。通常通過 Node.js 的 path 模塊去獲取絕對路徑:

path: path.resolve(__dirname, 'dist_[hash]')

publicPath

在復雜的項目里可能會有一些構(gòu)建出的資源需要異步加載,加載這些異步資源需要對應的 URL 地址包归。

output.publicPath 配置發(fā)布到線上資源的 URL 前綴锨推,為string 類型。 默認值是空字符串 ''箫踩,即使用相對路徑爱态。

這樣說可能有點抽象,舉個例子境钟,需要把構(gòu)建出的資源文件上傳到 CDN 服務上锦担,以利于加快頁面的打開速度。配置代碼如下:

filename:'[name]_[chunkhash:8].js'
publicPath: 'https://cdn.example.com/assets/'

這時發(fā)布到線上的 HTML 在引入 JavaScript 文件時就需要:

<script src='https://cdn.example.com/assets/a_12345678.js'></script>

使用該配置項時要小心慨削,稍有不慎將導致資源加載404錯誤洞渔。

output.pathoutput.publicPath 都支持字符串模版套媚,內(nèi)置變量只有一個:hash 代表一次編譯操作的 Hash 值。

crossOriginLoading

Webpack 輸出的部分代碼塊可能需要異步加載磁椒,而異步加載是通過 JSONP 方式實現(xiàn)的堤瘤。 JSONP 的原理是動態(tài)地向 HTML 中插入一個 <script src="url"></script> 標簽去加載異步資源。output.crossOriginLoading 則是用于配置這個異步插入的標簽的 crossorigin 值浆熔。

script 標簽的 crossorigin 屬性可以取以下值:

  • anonymous(默認) 在加載此腳本資源時不會帶上用戶的 Cookies本辐;
  • use-credentials 在加載此腳本資源時會帶上用戶的 Cookies。

通常用設置 crossorigin 來獲取異步加載的腳本執(zhí)行時的詳細錯誤信息医增。

libraryTarget 和 library

當用 Webpack 去構(gòu)建一個可以被其他模塊導入使用的庫時需要用到它們慎皱。

  • output.libraryTarget 配置以何種方式導出庫。
  • output.library 配置導出庫的名稱叶骨。

它們通常搭配在一起使用茫多。

output.libraryTarget 是字符串的枚舉類型,支持以下配置忽刽。

var (默認)

編寫的庫將通過 var 被賦值給通過 library 指定名稱的變量天揖。

假如配置了 output.library='LibraryName',則輸出和使用的代碼如下:

// Webpack 輸出的代碼
var LibraryName = lib_code;

// 使用庫的方法
LibraryName.doSomething();

假如 output.library 為空跪帝,則將直接輸出:

lib_code
lib_code

commonjs

編寫的庫將通過 CommonJS 規(guī)范導出今膊。

假如配置了 output.library='LibraryName',則輸出和使用的代碼如下:

[[圖片上傳失敗...(image-178b83-1653530114060)]](javascript:void(0); "復制代碼")

// Webpack 輸出的代碼
exports['LibraryName'] = lib_code;

// 使用庫的方法
require('library-name-in-npm')['LibraryName'].doSomething();

其中 library-name-in-npm 是指模塊發(fā)布到 Npm 代碼倉庫時的名稱。

commonjs2

編寫的庫將通過 CommonJS2 規(guī)范導出,輸出和使用的代碼如下:

// Webpack 輸出的代碼
module.exports = lib_code;

// 使用庫的方法
require('library-name-in-npm').doSomething();
exports
module.exports

output.libraryTargetcommonjs2 時蒂胞,配置 output.library 將沒有意義。

this

編寫的庫將通過 this 被賦值給通過 library 指定的名稱赖钞,輸出和使用的代碼如下:

// Webpack 輸出的代碼
this['LibraryName'] = lib_code;

// 使用庫的方法
this.LibraryName.doSomething();

window

編寫的庫將通過 window 被賦值給通過 library 指定的名稱,即把庫掛載到 window 上聘裁,輸出和使用的代碼如下:

// Webpack 輸出的代碼
window['LibraryName'] = lib_code;

// 使用庫的方法
window.LibraryName.doSomething();

global

編寫的庫將通過 global 被賦值給通過 library 指定的名稱雪营,即把庫掛載到 global 上,輸出和使用的代碼如下:

// Webpack 輸出的代碼
global['LibraryName'] = lib_code;

// 使用庫的方法
global.LibraryName.doSomething();

libraryExport

output.libraryExport 配置要導出的模塊中哪些子模塊需要被導出衡便。 它只有在 output.libraryTarget 被設置成 commonjs 或者 commonjs2 時使用才有意義献起。

假如要導出的模塊源代碼是:

export const a=1;
export default b=2;

現(xiàn)在你想讓構(gòu)建輸出的代碼只導出其中的 a,可以把 output.libraryExport 設置成 a镣陕,那么構(gòu)建輸出的代碼和使用方法將變成如下:

// Webpack 輸出的代碼
module.exports = lib_code['a'];

// 使用庫的方法
require('library-name-in-npm')===1;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谴餐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呆抑,更是在濱河造成了極大的恐慌岂嗓,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹊碍,死亡現(xiàn)場離奇詭異厌殉,居然都是意外死亡食绿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門公罕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器紧,“玉大人,你說我怎么就攤上這事楼眷〔簦” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵摩桶,是天一觀的道長桥状。 經(jīng)常有香客問我,道長硝清,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任转晰,我火速辦了婚禮芦拿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘查邢。我一直安慰自己蔗崎,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布扰藕。 她就那樣靜靜地躺著缓苛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邓深。 梳的紋絲不亂的頭發(fā)上未桥,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音芥备,去河邊找鬼冬耿。 笑死,一個胖子當著我的面吹牛萌壳,可吹牛的內(nèi)容都是我干的亦镶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼袱瓮,長吁一口氣:“原來是場噩夢啊……” “哼缤骨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尺借,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绊起,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褐望,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勒庄,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡串前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了实蔽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荡碾。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖局装,靈堂內(nèi)的尸體忽然破棺而出坛吁,到底是詐尸還是另有隱情,我是刑警寧澤铐尚,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布拨脉,位于F島的核電站,受9級特大地震影響宣增,放射性物質(zhì)發(fā)生泄漏玫膀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一爹脾、第九天 我趴在偏房一處隱蔽的房頂上張望帖旨。 院中可真熱鬧,春花似錦灵妨、人聲如沸解阅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽货抄。三九已至,卻和暖如春朱转,著一層夾襖步出監(jiān)牢的瞬間蟹地,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工肋拔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锈津,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓凉蜂,卻偏偏與公主長得像琼梆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窿吩,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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

  • 1. 安裝webpack到全局 在構(gòu)建之前茎杂,我們來在本地文件新建一個存放項目的文件夾,比如叫demo1這個項目纫雁,然...
    CodeMT閱讀 583評論 0 3
  • 配置 Webpack 的方式有兩種: 通過一個 JavaScript 文件描述配置煌往,例如使用 webpack.co...
    oWSQo閱讀 6,376評論 0 1
  • publicPath指定了一個在瀏覽器中被引用的URL地址。 對于使用 和 加載器,當文件路徑不同于他們的本地磁盤...
    飛呀飛哥閱讀 1,694評論 0 0
  • Entry(配置模塊的入口刽脖,必填) context: Webpack 在尋找相對路徑的文件時會以 context ...
    歡欣的膜笛閱讀 499評論 0 0
  • chunkFilename string = '[id].js' 剛已經(jīng)介紹過filename字段羞海,filenam...
    vv_小蟲蟲閱讀 369評論 0 0