首先,道歉!我很难在标题中总结这个问题,所以请随时进行修改。
假设我有两个公开默认功能的ES6文件
// file_1.js
export default function(){ /* do the thing */ }
// file_2.js
export default function(){ /* do the other thing */ }
现在,我通过以下输出配置使用webpack(带babel loader)将file_1
捆绑到模块中
// webpack config 1.
{
...
entry : '/path/to/file_1.js'
output : {
path: '/where/it/goes/',
filename : 'main.js',
library: 'my_component',
libraryTarget: 'var'
}
}
我还有一个最小的package.json
,因此可以将其导入为npm模块{ name: 'file_1', main: 'main.js' }
现在,当我想以统一的方式将file_1
和模块file_2
的代码捆绑在一起时,挑战就来了。
// master_entry.js
const components = {
file_1 : require('file_1'),
file_2 : require('/path/to/file_2')
}
如果我将以上内容捆绑在一起,然后查看components
的结果形式,那么
console.log(components.file_1)
// outputs
Module {__esModule: true, Symbol(Symbol.toStringTag): "Module" }
console.log(components.file_2)
// outputs
Module {default: f, __esModule: true, Symbol(Symbol.toStringTag): "Module" }
file_2
(因此没有预先捆绑)的功能因此,我有可用的默认功能-这就是我想要的。捆绑file_1
时如何实现同一目的?
我尝试使用webpack的output
选项,例如library
,libraryTarget
,libraryExport
。但是我有点迷茫,现在在文档上花了很长的时间-因此需要帮助!
谢谢。
file_1.js
-webpack->
软件包file_1
(入口点file_1.js
)
master_entry
-webpack->
main.js
也就是说,webpack首先在file_1.js
上运行,随后又结合了导入file_1
软件包和file_2.js
的运行。
答案 0 :(得分:0)
我想我有一个解决方案;)
// file_1.js
export default function file1(){ console.log('file_1') }
// file_2.js
export default function file2(){ console.log('file_2') }
webpack.config.js应该看起来像这样
entry: {
file1: './sources/js/file_1.js',
file2: './sources/js/file_2.js',
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: './[name].js',
library: '[name]',
libraryExport: 'default',
libraryTarget: 'umd', // you can use libraries everywhere, e.g requirejs, node
umdNamedDefine: true,
},
从现在开始您可以访问:
<script>
new file1(); // console.log show file_2
new file2(); // console.log show file_2
</script>
您现在还可以将选项传递给函数。看看我的solution