Javascript 如何在Meteor 1.4.x中运行为NodeJS v6 LTS ES2015编写的模块?
我知道Meteor附带了绑定为依赖项的NodeJ,但我有一个用ES6编写的模块,其中一个类方法中声明了一个默认参数值。目前使用Meteor v1.4.3.2时出现了如下错误:Javascript 如何在Meteor 1.4.x中运行为NodeJS v6 LTS ES2015编写的模块?,javascript,node.js,meteor,ecmascript-6,Javascript,Node.js,Meteor,Ecmascript 6,我知道Meteor附带了绑定为依赖项的NodeJ,但我有一个用ES6编写的模块,其中一个类方法中声明了一个默认参数值。目前使用Meteor v1.4.3.2时出现了如下错误: (STDERR) packages/modules.js:374 (STDERR) constructor(options={format:'.json'}) { (STDERR) ^ (STDERR) (STDERR) SyntaxError: Unexpected toke
(STDERR) packages/modules.js:374
(STDERR) constructor(options={format:'.json'}) {
(STDERR) ^
(STDERR)
(STDERR) SyntaxError: Unexpected token =
节点-v
。我肯定在运行NodeV6.10.0
$ > node -v
v6.10.0
我还在模块目录中运行npm test
时,使用NodeJS v6.10.0在本地运行并通过构建的chai测试来介绍模块。这个模块是我正在同时开发的本地包。它是使用npm安装/path/to/module
安装在meteor中的
编辑2:不幸的是,运行meteor add ecmascript
并没有起到作用。这是一个专门为NodeV6+编写的定制NPM模块。Meteor没有使用NodeV6,而是使用4.8
$ > meteor node --version
v4.8.0
很明显,虽然NodeV4.8支持很多ES6功能,但它不支持默认函数参数。请参阅:1。在Meteor中使用带有
ecmascript
的导入
模块
只要确保你安装了软件包并使用了文件夹结构,你就可以开始了。ecmascript
包肯定支持es6参数。下面是流星文件
函数参数的默认表达式,在参数未定义时进行计算,…用于捕获剩余参数而不使用arguments对象的rest参数:
你可以这样添加它
$ meteor add ecmascript
2。使用babel
传输外部ES6模块-最佳解决方案
要使用npm模块,您必须向包(npm模块…而不是meteor项目)中添加类似或的内容,以便将es6传输到可以使用的内容。这是发布可由任何节点版本使用的构建的实践(例如,您不希望要求某人以特定节点版本为目标来使用您的包)
假设模块中有一个package.json
。i、 e.您已经在/path/to/module
中运行了npm init
$ cd path/to/package
$ npm install --save-dev babel-cli
为两组源创建适当的src
和lib
文件夹
$ mkdir src // for ES6/ES2015 sources
$ mkdir lib // for ES5 transpiled sources
然后使用build命令编辑package.json
。这告诉babel在哪里可以找到源代码(src
),要使用(es2015
)传输的预设,以及在哪里输出ES5源代码(lib
)
请注意另外几个要点:
- 如果您使用
管理源代码,请添加git
文件以忽略.gitinore
目录/lib/
- 如果您正在考虑将模块发布到npm,请添加一个忽略
目录的/src/
文件。如果您单独使用.npmignore
发布,npm将使用.gitignore
并忽略您的.gitignore
李>/lib
流星建造
控制流星建造-最后的努力
另外,我不确定你是否可以升级与meteor捆绑的节点版本,但你总是可以构建你的应用程序并在不同的节点版本中运行。使用命令。然后按照Build project文件夹中的说明进行操作。不幸的是,这里的螺母没有裂开。见我的编辑2。
// package.json
...
"scripts": {
"build": "babel src -d lib --presets=es2015"
},
"main": "./lib/mymodule.js",
...