最近在编写公共仓库代码,遇到问题如下:
我们写一个最小用例,姑且把它叫做Foo
,编写入口文件:index.js
export default {
Foo: { a:1, b:2 }
}
使用了umd格式打包这个index.js,output配置如下:
module.exports = {
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name].js',
library: 'Foo',
libraryTarget: 'umd',
libraryExport: 'default',
umdNamedDefine: true,
},
}
打包完成,在另一个vue-cli构建的项目中,直接引入打包后的文件作为测试,打印'Foo'居然是undefined:
import Foo from 'path/to/dist/index.js'
console.log(Foo) // undefined
经过排查:不是Webpack打包配置的问题,而是vue-cli项目中默认的babel
配置,把这个Foo
当成了项目内部文件。即当你使用import Foo from 'xxx'
时,babel会检查目标文件(也就是'dist/index.js')是否有export default
,然而打包后的文件一般不再二次处理了,需要将其添加到忽略项中
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
//添加忽略项
ignore: [
'../../dist',
]
}
done
网友评论