如何在 es6 class 被 webpack 打包成一个函数后实例化它

how to instantiate an es6 class after it's been bundled into a function by webpack

我正在学习 es6 类 教程并制作了一个漂亮的小 d3 可视化。然后我做了一秒钟,认为我应该做一些关于将它们捆绑到一个库中的事情,所以最初尝试了模块(然后发现浏览器还不支持它们),然后我安装了 webpack 1.13 并使用 require() (因为虽然看起来 import 应该工作,但它没有;直到 2.0 才支持)。

只是,现在 bundle.js 中的 export default class Foo(data, args) 变成了 var Foo = function () { function Foo(data, args) ...

当我尝试 Foo.Foo(data, args) 时,解释器只是抱怨,但我的直觉是,以这种方式假装实例化一个科学怪人类可能不是 webpack 的意图?是的,我可以将我所有的模块文件连接到我自己的 bundle.js 然后去 new Foo(),但我正在尝试使用合适的捆绑工具。

我觉得在线文档中 ES6 中的 "possible" 与您如何在 webpack 中实现它之间存在很大差距。

将模块与 webpack 捆绑在一起的分步方法是什么,这样您就可以从 index.js 脚本中的捆绑包中实例化 类 ?


附录:(我到目前为止所做的)

├── bundle.js             #supposed to bundle Foo and Bar
├── bundle.js.map
├── index.html            #include bundle.js and index.js before </body>
├── index.js              #want to be able to new Foo() and Bar()
├── js
|    ├── foo.js           Foo() lives here
|    └── bar.js           Bar() lives here
├── LICENSE
├── node_modules
|    └── (stuff)
├── package.json
├── README.md
├── test
|    └── (stuff)
└── webpack.config.js     # builds without errors

Webpack 是一个打包工具。这意味着在你 运行 webpack 之后,它会解析你所有的文件并将它们放入一个文件中,(如果使用 CommonsChunkPlugin 之类的东西,则更多)。

捆绑包中的所有内容都是私有的,因此如果您想共享您的 类、代码等,您将需要公开它们,https://github.com/webpack/expose-loader 可以做到这一点,但本质上它所做的只是将东西放在全局命名空间上,在浏览器中,全局命名空间通常是 window 对象。

与其他 webpack 用户共享代码的更好方法是,您只需向他展示您的代码,然后他就可以编译到他的 webpack 包中。他甚至可以使用 require.ensure 进行自动捆绑拆分,如果说您的 Class 不经常使用,这将很方便,因此它会按需加载。

希望以上内容是有道理的,因为我记得当我第一次开始使用 webpack 时,它有时确实让人不知所措,而且文档对于初学者来说也不是最好的。