mr.*_*r.b 26 javascript commonjs ecmascript-6 webpack es6-module-loader
我一直在通过Webpack教程.在其中一个部分中,它给出了代码示例,其中包含一行本质问题:
export default class Button { /* class code here */ }
Run Code Online (Sandbox Code Playgroud)
在所述教程的下一部分,标题为"代码分割",上面定义的类是按需加载的,如下所示:
require.ensure([], () => {
const Button = require("./Components/Button");
const button = new Button("google.com");
// ...
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,此代码抛出异常:
Uncaught TypeError: Button is not a function
Run Code Online (Sandbox Code Playgroud)
现在,我知道包含ES6模块的正确方法是简单地import Button from './Components/Button';在文件的顶部,但是在文件中的任何其他地方使用类似的构造会让babel成为一个悲伤的熊猫:
SyntaxError: index.js: 'import' and 'export' may only appear at the top level
Run Code Online (Sandbox Code Playgroud)
在require.ensure()上面的上一个()示例的一些摆弄之后,我意识到ES6 export default语法导出一个具有名为property的对象,该对象default包含我的代码(Button函数).
我通过.default在require调用后附加来修复损坏的代码示例,如下所示:
const Button = require("./Components/Button").default;
Run Code Online (Sandbox Code Playgroud)
...但我认为它看起来有点笨拙并且容易出错(我必须知道哪个模块使用ES6语法,哪个使用旧版本module.exports).
这让我想到了一个问题:从使用CommonJS语法的代码导入ES6代码的正确方法是什么?
Coo*_*ham 20
要export default与Babel一起使用,您可以执行以下操作之一:
require("myStuff").defaultnpm install babel-plugin-add-module-exports --save-dev或者3:
//myStuff.js
var thingToExport = {};
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = thingToExport;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8540 次 |
| 最近记录: |