由於打算開發一個小組件庫,可是要對已經編譯完成的組件庫的腳本進行一遍完整的測試。因此,本人就很天然的啓動一個項目,引入已經編譯好的組件庫腳本,想着大展伸手,結果。。。vue
遇到了一大堆腦瓜子疼的警告"export 'default' (imported as 'a') was not found in 'xxx' "
,或亂七八糟的報錯...(捂臉哭.jpeg)。node
a.umd.js
是使用了ES6 模塊的寫法,將對應的模塊export default 出來的。本來想着只有在node_modules中才能正常使用,好,爲了調試,我選擇直接將該腳本(a.umd.js)做爲本地依賴引入,所以,我就很興奮去嘗試了。。。步驟是這樣的:webpack
// 在package.json直接經過經過本地依賴的方式引入腳本a.umd.js
{
"name": "baz",
"dependencies": {
"a": "file:./config/a.umd.js"
}
}
複製代碼
嗯,很順利npm i
完成,然鵝。web
直接經過本地依賴的方式依舊存在以上的問題。vue-cli
npm i
發佈到 npm 的腳本a.umd.js
能在 node_modules 正常使用而經過本地依賴的方式安裝 node_modules 以及直接引用卻不行?通過網上查資料以及分析項目,終於發現了這麼一個事情。。。npm
嗯,是的,babel-loader 對a.umd.js
這個腳本,再次進行了編譯。。。致使本來編譯好的能夠正常使用的腳本再次進一步被編譯了,因此纔會報錯"export 'default' (imported as 'a') was not found in 'xxx' "
。json
爲了能順利地在本地調試組件庫的腳本a.umd.js,我只能選擇在引入該腳本 a.umd.js調試的項目中進行 babel-loader 的配置,將 babel-loader 對 a.umd.js 的編譯進行exclude。即babel-loader 不編譯名字中包含a.umd
字符的文件。babel
module: {
rules: [
{
test: /\.m?js$/,
exclude: /a.umd/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
複製代碼
chainWebpack: (config, isServer) => {
// config 是 ChainableConfig 的一個實例
config.module.rule('js').use('babel-loader')
.loader('babel-loader').tap(options => {
options.exclude = /a.umd/
// 修改它的選項...
return options
})
},
複製代碼
從過以上的方式就能夠避免babel-loader 對已經編譯的文件進行二次編譯前端構建
babel-loader
的配置是不對 node_moudules 文件夾中的文件進行編譯,因此當直接將腳本放在 node_modules 或直接經過 npm 遠程 install 都能正常使用。