【发布时间】:2016-08-16 15:22:40
【问题描述】:
我需要编写一个可在全局窗口中使用的模块。
我使用 es6 创建模块,我定义的每个类都有自己的文件。
我正在使用 webpack 对这些类进行 babelify 和捆绑。
我的模块的入口点也是包含要公开的全局的文件。
我已经尝试了所有方法来实现这一点,包括:
- 暴露加载器
- 导入加载器
- 出口商加载器
- 输出:库
- 黑魔法:(
我尝试过的代码示例:
我想得到:window.MyMod
// mymod.js
export class MyMod {
constructor(aaa) {
this.aaa = aaa;
}
toString() {
return this.aaa;
}
}
// webpack.config
var entries = [
'./src/mymod.js'
];
module.exports = {
...,
module: {
loaders: [
{
test: require.resolve('./src/mymod.js'),
loader: 'expose?MyMod'
},
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015']
}
}
]
}
这只会在包含 MyMod 作为构造函数的窗口上为我获取一个对象 MyMod。
任何帮助将不胜感激。
【问题讨论】:
-
不是一个配置解决方案,但你不能只为你的模块提供一个索引文件
import lib from './lib'; window.lib = lib -
如果我错了,请纠正我,但你是说:我正在使用 webpack 对这些类进行 babelify 和捆绑... 和 ...这个只会在窗口上给我一个对象 MyMod,它包含 MyMod 作为构造函数。 这不正是 bable 在编译 ES6 时所做的吗?类将被编译为构造函数,因为在 ES5 中类不存在。
-
也许我应该以某种方式将类包装在返回 MyMod 的匿名自调用函数中?
-
您是否尝试过使用ProvidePlugin?
标签: javascript module ecmascript-6 global-variables webpack