Javascript 如何合并ES6类源文件?

Javascript 如何合并ES6类源文件?,javascript,ecmascript-6,Javascript,Ecmascript 6,目标是创建一个兼容的bower包 我不熟悉包装,做了一些研究,但还没有任何线索 问题简化如下: \src\ID.js \src\Person.js ID.js export default class ID { static gen() { return 'a unique ID'; } } import ID from './ID.js'; export default class Person { constructor(name) {

目标是创建一个兼容的
bower

我不熟悉包装,做了一些研究,但还没有任何线索

问题简化如下:

\src\ID.js
\src\Person.js
ID.js

export default class ID {
    static gen() {
        return 'a unique ID';
    }
}
import ID from './ID.js';

export default class Person {
    constructor(name) {
        this.name = name;
        this.id   = ID.gen();
    }
}
Person.js

export default class ID {
    static gen() {
        return 'a unique ID';
    }
}
import ID from './ID.js';

export default class Person {
    constructor(name) {
        this.name = name;
        this.id   = ID.gen();
    }
}
唯一应该公开的类是
Person
ID
将仅在内部使用

如果我想创建一个名为
person
的包,那么我认为最好将所有源文件构建成一个包

我知道使用ES5进行一些合并,但是对于ES6类,我不知道

也许我可以创建一个父对象来保存这两个类?但我真的很想知道正确的方法。如果没有这种方法,我也会采取类似于将ES6编译为ES5方法的方法。

您可以使用rollup:(我假设您已经安装了nodejs)

此命令生成此文件:

var Person = (function () { 'use strict';

    class ID {
        static gen() {
            return 'a unique ID';
        }
    }

    class Person {
        constructor(name) {
            this.name = name;
            this.id   = ID.gen();
        }
    }

    return Person;

})();
--format
参数可以是

  • iife
    :rollup生成一个函数,该函数将导出的变量保存到由
    --name
    参数指定的变量中
  • amd
    ,如果您使用RequireJS或其他amd兼容模块管理器
  • cjs
    ,如果需要在node.js中运行模块
  • umd
    =
    iife
    +
    amd
    +
    cjs
  • es6
    (默认):汇总使用es6模块导出变量

如果您需要在不支持ES6的浏览器中运行代码,可以使用babel:

$ npm install rollup-plugin-babel
$ npm install babel-preset-es2015-rollup

$ rollup --config config.js --input src/Person.js --output dist/Person.js
config.js:

var babel = require("rollup-babel-plugin");

module.exports = {
  format: "iife", // --format
  moduleName: "person", // --name
  plugins: [
    babel({
      presets: [
        require("babel-preset-es2015-rollup")
      ],
    }),
  ],
};