我正在用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转换为浏览器和节点兼容的文件?
非常感谢!