【发布时间】:2019-03-29 19:22:02
【问题描述】:
我有以下package.json:
{
"name": "watchman",
"version": "1.0.0",
"description": "Simple watcher for ES6 to AMD conversion",
"author": "Luciad NV",
"license": "MIT",
"scripts": {
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 babel es6/geometry es6/ria es6/symbology -d release --watch"
},
"devDependencies": {
"@babel/core": "^7.4.0",
"@babel/plugin-transform-modules-amd": "^7.2.0",
"cross-env": "^5.2.0"
},
"dependencies": {
"@babel/cli": "^7.2.3"
}
}
我有以下.babelrc:
{
"plugins": ["@babel/plugin-transform-modules-amd"]
}
我的es6/ria 文件夹中有以下 es6 模块:
import ProgrammingError from "../error/ProgrammingError";
import Promise from "../util/Promise";
function Evented(supportedEvents) {
}
Evented.prototype = Object.create(Object.prototype);
Evented.prototype.constructor = Evented;
Evented.prototype.on = function(event, callback, context, options) {
};
Evented.prototype.emit = function(event) {
};
export default Evented;
如果我运行npm run build 这将产生一个具有以下实现的 AMD 模块:
define(["exports", "../error/ProgrammingError", "../util/Promise"], function (_exports, _ProgrammingError, _Promise) {
"use strict";
Object.defineProperty(_exports, "__esModule", {
value: true
});
_exports.default = void 0;
_ProgrammingError = _interopRequireDefault(_ProgrammingError);
_Promise = _interopRequireDefault(_Promise);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function Evented(supportedEvents) {}
Evented.prototype = Object.create(Object.prototype);
Evented.prototype.constructor = Evented;
Evented.prototype.on = function (event, callback, context, options) {};
Evented.prototype.emit = function (event) {};
var _default = Evented;
_exports.default = _default;
});
当我尝试使用例如加载Evented 模块时。 Require.Js,我期待Evented“类”。
相反,我得到一个具有default 属性的对象,其中包含Evented“类”。
这是一个错误吗?还是这样设计的?
而且它不是bug,有没有办法达到预期的效果?
有没有办法可以使用 @babel/plugin-transform-modules-amd 插件将此 ES6 转换为 AMD,因此它按预期返回 Evented "class"?
【问题讨论】:
标签: javascript requirejs babeljs amd es6-modules