@ babel / plugin-transform-modules-amd的行为不符合预期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@ babel / plugin-transform-modules-amd的行为不符合预期相关的知识,希望对你有一定的参考价值。

我有以下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“class”。

相反,我得到一个带有default属性的对象,其中包含Evented“类”。

这是一个错误吗?或者它是这样设计的?

它不是一个错误,有没有办法达到预期的效果?

有没有办法可以使用@ babel / plugin-transform-modules-amd插件将此ES6转换为AMD,因此它会按预期返回Evented“类”?

答案

这是它的工作原理。我们使用不同的插件,你可以在这里工作,这里https://www.npmjs.com/package/babel-plugin-transform-es2015-modules-simple-amd

以上是关于@ babel / plugin-transform-modules-amd的行为不符合预期的主要内容,如果未能解决你的问题,请参考以下文章

babel版本变化 - 简单理解

`@babel/runtime` 和 `@babel/plugin-transform-runtime` 版本

找不到模块 'babel-core' 但已安装 @babel/core

es6的babel转换器需要依赖啥环境吗

babel从入门到入门

Babel