由于打算开发一个小组件库,可是要对已经编译完成的组件库的脚本进行一遍完整的测试。因此,本人就很天然的启动一个项目,引入已经编译好的组件库脚本,想着大展伸手,结果。。。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 都能正常使用。