webpack5的entry和output配置小白學(xué)習(xí)
output
輸出打包后的代碼,配置如何輸出和輸出位置
在webpack.config
中output
包含以下屬性:
path
:代碼打包后要輸出的位置,且為絕對(duì)路徑: 例如:path.resolve(__dirname, 'build')
,則打包后的代碼都會(huì)輸出到當(dāng)前目錄下的build
文件夾內(nèi)。
publicPath
:需要加載的資源的真實(shí)路徑,默認(rèn)為相對(duì)路徑:例如:http://www.baidu.com/dist/
,
則在index.html
中可以看到script
標(biāo)簽的src
屬性的值都加了publicPath
的值。一般情況下我們都將它設(shè)置為/
或者./
crossOriginLoading
: 設(shè)置script
的cross-origin
屬性,該屬性有三個(gè)值:
false
: 默認(rèn)值, 表示不跨域;
anonymous
: 表示跨域,不設(shè)置任何憑證;
use-credentials
: 表示跨域,需要設(shè)置憑證;(基本用不到)
filename
打包后的js文件名稱,且需要寫(xiě)后綴
assetModuleFilename
靜態(tài)資源輸出名稱
chunkFilename
異步引入的文件名稱,既在js中import('XXX.js').then(_=>{})這樣引入或者通過(guò)webpack自帶的異步引入方式等其他異步引入js的方式,這里就會(huì)使用配置的名稱;asseet_[name]_[id].js
可以配置成通用形式,也可以自己指定[chunk]
值。
// webpack自帶的一些內(nèi)置變量一樣的東西。
[name]
:原始文件名稱
[file]
:原始路徑,帶文件名、后綴
[base]
:原始文件名+后綴
[path]
:路徑名稱,不帶文件名稱
[id]
:可以設(shè)置,或者按照路徑分割,啥都不管的話就等于webpack給當(dāng)前文件引用的key值
library
: 不僅僅是一個(gè)文件,而是需要導(dǎo)出一個(gè)庫(kù)。則就會(huì)把入口文件export defalut導(dǎo)出的東西創(chuàng)建成一個(gè)ems形式的的包文件,即可在任意項(xiàng)目?jī)?nèi)就通過(guò)script或import形式引入使用了。
library.name
包名稱
library.type
:var,module,umd,cmd,amd,require等等
library.export
:指定哪個(gè)導(dǎo)出應(yīng)該暴露為一個(gè)庫(kù),假如入口文件有l(wèi)og1,log2兩個(gè)方法。則可以指定導(dǎo)出誰(shuí)。
library.auxiliarycomment
:在UMD模式下可用,可以在js內(nèi)添加注釋說(shuō)明,一般用于,顯示作者,代碼版本號(hào),版權(quán)等等信息。
library.umdNamedDefine
: 在UMD模式下是否使用define
最常用的也就是這些了。
entry
我可以指定webpack的配置文件,通過(guò)--config
webpack
默認(rèn)入口entry: src/index.js
,出口為:dist/main.js
默認(rèn)配置文件為:webpack.config.js
如果需要指定其他配置文件,可以使用--config
例如:
在webpack5
文件夾根目錄創(chuàng)建一個(gè)名為:webpack.dev.js
,將webpack.config.js
中的內(nèi)容剪貼到它中。
此時(shí)webpack.config.js
中已經(jīng)沒(méi)有內(nèi)容,這時(shí)候執(zhí)行npm run build
會(huì)直接報(bào)錯(cuò)。
我們修改package.json
中scripts
屬性的值為:
"scripts": { "build": "webpack --config ./webpack.dev.js" }
再執(zhí)行npm run build
發(fā)現(xiàn)可以構(gòu)建成功,則我們就將默認(rèn)的配置文件改為了webpack.dev.js
這在日后我們需要不同環(huán)境構(gòu)建不同內(nèi)容時(shí)候,通過(guò)命令可以輕松構(gòu)控制配置文件的使用起到關(guān)鍵性作用。
好了,上面內(nèi)容過(guò)于簡(jiǎn)單,就不使用webpack-cli
來(lái)創(chuàng)建了,有興趣的小伙伴可以自行搜索
我可以指定webpack的需要工作的根目錄
webpack.config.js中內(nèi)容如下:
module.exports = { context: path.resolve(__dirname, 'src'), // entry: './src/index.js', }
這context是干啥的?。?/p>
執(zhí)行以下npm run build
,發(fā)現(xiàn)報(bào)錯(cuò)了??磮?bào)錯(cuò)信息為:
Module not found: Error: Can`t resolve './src/index.js' in 'User/xxx/webpack5/src'
這下我們翻譯一波不就理解了么!原來(lái)context
指定到src
為上下文了,則我們內(nèi)部使用的目標(biāo)都指定到src目錄了。那entry
就不能再寫(xiě)成./src/index.js
了。(你真廢話,能講明白不?)
其實(shí)就是一句話:使用了context
后,則入口出口路徑都是以context
配置的路徑為基準(zhǔn)了。因此,entry
就得寫(xiě)成/index.js
或./index.js
, 因?yàn)楝F(xiàn)在/
就指得是src
目錄。
把context先刪除或者注釋了吧,下面的內(nèi)容用不到。。。
說(shuō)到entry了,那我為何就不能有多個(gè)入口文件呢?
entry
可以配置多個(gè)入口文件,當(dāng)只有一個(gè)的時(shí)候值為string
類型,多個(gè)的時(shí)候就為Array
module.exports = { entry: ['./src/index.js', './src/test.js'] // 多個(gè)為Array,有先后順序之分 }
我們可以在test.js
中輸入一串代碼console.log('少裝B,不會(huì)造雷劈!')
,再執(zhí)行npm run build
,雙擊打開(kāi)dist/index.html
,F12
打開(kāi)控制臺(tái),可以發(fā)現(xiàn):index.js
和test.js
中的內(nèi)容都輸出了。
(誒?我就想讓test.js
放數(shù)組第一位,你會(huì)發(fā)現(xiàn),test.js
中的內(nèi)容先打印了)entry
也是有先后順序之分的,數(shù)組前面的先執(zhí)行,后面的以此類推。
entry
也可以是object
類型,用的比較少,稍微記一下得了。若你是大牛,需要寫(xiě)自己的js插件引擎啥的,那你就學(xué)吧。
下面內(nèi)容就是說(shuō):我不想讓index.js
和test.js
打包在一起, 讓他們分別打包
entry: { moment: { import: 'moment-mini', runtime: 'runtime' }, // 將公用部分提出來(lái), 生成dist/moment.js并自動(dòng)加入到html內(nèi),通過(guò)script標(biāo)簽加入 reactvendors: { import: ['react', 'react-dom'], runtime: 'runtime' }, // 將公用部分提出來(lái), 生成dist/reactvendors.js并自動(dòng)加入到html內(nèi),通過(guò)script標(biāo)簽加入 abc: ['vue', 'react'], app: { import: './src/index.js', // 入口文件 dependOn: ['abc'], // 本來(lái)app構(gòu)建時(shí)候會(huì)打包所有依賴,但這里配置了abc,則就不會(huì)將'vue','react'打包在內(nèi) filename: 'app.js' // 打包后的文件名稱 }, test: { import: './src/test.js', // 入口文件 dependOn: ['reactvendors', 'moment'], // 本來(lái)test構(gòu)建時(shí)候會(huì)打包所有依賴,但這里配置了reactvendors,moment ,則就不會(huì)將其所需要的包打包在內(nèi),而是通過(guò)共享形式加入到html中 filename: 'pages/[name].js' // 打包后的文件名稱,也可以寫(xiě)成 'pages/test.js',則生產(chǎn)地址為'dist/pages/test.js', [name]: test }, }
entry: { app: './src/index.js', // 入口文件, test: ['./src/test.js', './src/nulls.js'], // 多個(gè)入口文件 }
我們測(cè)試entry
為以下的配置:
entry: { app: { import './src/index.js' }, test: './src/test.js' }
因?yàn)槊看螛?gòu)建都需要?jiǎng)h除dist
文件夾才能保證不緩存任何東西,則我們?cè)?code>package.json中輸入:
"scripts": { "build": "rm -rf ./dist && webpack", "build:dev": "rm -rf ./dist && webpack --config ./webpack.dev.js" // 這行我寫(xiě)著只是為了方便讀者理解 }, // 或者你手動(dòng)刪除一下dist文件夾,不改package.json也行,可能你運(yùn)行在cmd中不支持rm命令,可以使用git的bash命令行窗口 // windows平臺(tái)下的vscode自帶的命令行可能不支持rm命令,所以手動(dòng)刪除一下dist,就別改package.json文件了
再執(zhí)行npm run build
如果報(bào)錯(cuò)說(shuō)'rm' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序
,那你就別改package.json
,手動(dòng)刪除dist文件一下即可
可以發(fā)現(xiàn)dist
文件夾內(nèi)有兩個(gè)js
文件:app.js
和test.js
,再打開(kāi)index.html
文件,發(fā)現(xiàn)它們兩個(gè)js
文件也都被自動(dòng)以<script>
標(biāo)簽形式引入了。
我們?cè)俑淖円稽c(diǎn):
entry: { app: { import './src/index.js', filename: 'nba.js' }, cba: { import './src/index.js', filename: '[name].js' }, }
再執(zhí)行npm run build
,可以發(fā)現(xiàn)dist
文件夾內(nèi)有:nba.js
和cba.js
總結(jié)
context: 指定/
是誰(shuí)
entry: 指定一個(gè)或多個(gè)入口文件,dependOn可以共享打包資料
以上就是webpack5的entry和output配置小白學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于webpack5的entry和output配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
prototype.js簡(jiǎn)單實(shí)現(xiàn)ajax功能示例
這篇文章主要介紹了prototype.js簡(jiǎn)單實(shí)現(xiàn)ajax功能,結(jié)合實(shí)例形式分析了prototype.js前臺(tái)實(shí)現(xiàn)ajax與后臺(tái)struts的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10代碼塊高亮可復(fù)制顯示js插件highlight.js+clipboard.js整合
最近有個(gè)需求是將jsp頁(yè)面上的某一段代碼塊格式化成類似CSDN的代碼塊的樣式,而且很多平臺(tái)都使用了這樣的功能,下面就為大家簡(jiǎn)單分享一下2021-02-02js-FCC算法-No repeats please字符串的全排列(詳解)
下面小編就為大家?guī)?lái)一篇js-FCC算法-No repeats please字符串的全排列(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05轉(zhuǎn)換json格式的日期為Javascript對(duì)象的函數(shù)
項(xiàng)目中碰到了用jQuery從后臺(tái)獲取的json格式的日期的字符串,需要將此字符串轉(zhuǎn)換成JavaScript的日期對(duì)象,記在此處,以備后用。2010-07-07js實(shí)現(xiàn)簡(jiǎn)易垂直滾動(dòng)條
本文主要介紹了js實(shí)現(xiàn)簡(jiǎn)易垂直滾動(dòng)條的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02js+html+css實(shí)現(xiàn)手動(dòng)輪播和自動(dòng)輪播
這篇文章主要為大家詳細(xì)介紹了js+html+css實(shí)現(xiàn)手動(dòng)輪播和自動(dòng)輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例
這篇文章主要介紹了微信小程序網(wǎng)絡(luò)請(qǐng)求封裝示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07