如何从src(source)为lib(模块)和dist(浏览器)编译npm包?

时间:2017-07-25 11:17:23

标签: javascript node.js npm babel

我正在用JavaScript编写一个小类对象,我希望它既可以用于节点应用程序,也可以用作独立的浏览器JavaScript文件。

我想我找到了一个解决方案,但我不确定它是不是应该是这样的。

让我试着解释目录的样子。

好的,我的主文件位于名为src / index.js的目录中。 此文件包含一个简单的ES6类,我使用ES6导出导出(按照AirBnb使用导入/导出)。

export default Person class {

    constructor() {
    // some code here...
    }

    getExampleMethod() {
    // some code here...
    }

}

好。所以这段代码不会在浏览器中运行,因为浏览器不支持“导出默认值”而且它是ES6所以我应该使用Babel将它转换为ES5。

但是使用带有--presets = es2015的Babel不会删除“导出默认值”,因此浏览器仍会抛出错误。所以我使用一个名为“replace”的包来解决这个问题,它只是在使用Babel进行转换之前搜索并替换该字符串。

在我的package.json中,它看起来像这样:

"build:dist": "babel src -d dist --no-babelrc && replace 'export default ' '' dist/index.js && babel dist -d dist --presets=es2015",

所以基本上首先移动文件,然后删除“导出默认”行,并将其转换为......这样可行!

对于lib目录,我这样做:

"build:lib": "babel src -d lib --plugins=add-module-exports,transform-es2015-modules-commonjs",

所以基本上移动文件并将其转换,将“模块导出”添加到“commonjs”模块中。

这有效......但它真的不是这样做的方式吗?我已经尝试过使用Browserify,Webpack等,但是当我这样做时,我似乎无法从我的课程中启动一个新对象?它给了我一条错误消息,说“没有定义新的Person()”或类似的东西。

我想如何以简单的ES6风格编写我的源代码,将其转换为在浏览器中使用以及用于节点使用,同时能够拥有如下所示的API:“var person = new Person ();?“

真的,我的问题可能更多的是:如何将src / index.js转换为浏览器和节点兼容的文件?

非常感谢!

0 个答案:

没有答案