【发布时间】:2015-11-15 10:09:12
【问题描述】:
我正在尝试找到将我的 ECMA Script 6 代码转换为 ES5 的最佳/工作解决方案。我想使用模块加载器并利用继承。到目前为止,我最接近的是使用带有 es2015 预设和 transform-es2015-modules-systemjs 插件的 Babel 6。这是我的.babelrc 文件:
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-systemjs"]
}
我的文件结构如下:
- dist
(transpiled files in the same structure as the src folder)
- src
- classes
- Point.js
- ColorPoint.js
app.js
index.html
app.js 的内容是这样的:
import ColorPoint from 'classes/ColorPoint.js';
let cp = new ColorPoint(25, 8, 'green');
console.log(cp.toString()); // '(25, 8) in green'
Point.js 的定义如下:
export default class Point {
而ColorPoint.js的定义是这样的:
import Point from 'classes/Point.js';
export default class ColorPoint extends Point {
为了完整起见,index.html 的重要部分如下所示:
<script src="node_modules/systemjs/dist/system.js"></script>
<script>
System.config({
baseURL: 'dist'
});
System.import('app.js');
</script>
我正在使用以下命令将整个 src 文件夹转换为 dist 文件夹:
babel src -d dist
问题是 Babel 在转译的 ColorPoint.js 文件的顶部添加了一行,这会在运行时破坏 System.js。错误是:
Uncaught Error: Module http://localhost/es6-tutorial/dist/classes/ColorPoint.js interpreted as global module format, but called System.register.
但是当我删除这个文件顶部的这一行时,它又可以工作了:
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
我猜这可能是转译器中的一个错误。我希望从以前成功实现继承和模块加载的人那里得到一些指导。或者也许指向我可以查看的当前工作示例。
【问题讨论】:
标签: javascript inheritance ecmascript-6 babeljs