我使用meteor create创建了一个新的流星项目
我运行了npm install -S spacy-nlp,其中包含一些ES6代码
在我的server/main.js中,我写了import spacy from 'spacy-nlp'
运行meteor时,它抱怨Error: The babel-runtime npm package could not be found in your node_modules. Please run the following command to install it: meteor npm install --save babel-runtime
我安装了babel-runtime
然后它抱怨

W20161120-16:40:30.175(8)? (STDERR) /Users/prashanthcr/code/es6-meteor-test/node_modules/spacy-nlp/src/start-io.js:3
W20161120-16:40:30.176(8)? (STDERR) const { spawn } = require('child_process')
W20161120-16:40:30.176(8)? (STDERR)       ^
W20161120-16:40:30.177(8)? (STDERR)
W20161120-16:40:30.178(8)? (STDERR) SyntaxError: Unexpected token {



不知道从那里去哪里。为什么不能导入使用ES6的npm软件包?

我已经全局安装了Node.js 7.1.0,并且正在使用Meteor 1.4.2.3。

最佳答案

Meteor不会将node_modules中的任何文件编译到ES5。这意味着代码将保持不变。这就是在运行时而不是在构建过程中收到错误的原因。

流星v1.4.2.x使用节点v4.6.2(可以使用meteor node --version检查节点版本)。

此版本的节点通常不支持解构分配(const {foo} = ...语法)。这需要使用--harmony_destructuring标志。您可以通过运行版本为4.x和6.x的节点外壳(REPL)轻松进行测试。

在3个终端会话中键入以下内容:


$ meteor node
$ meteor node --harmony_destructuring
$ node,当节点位于v6 +中时


码:

let bar = () => ({foo: 3}); // 1
let { foo } = bar(); // 2
eval("let { foo } = bar();"); // 3



语句1可以正常运行。
语句v4将不会识别语句2(希望有更多用户输入),并且将按节点v6和v4的预期,使用标志对其进行评估。
语句3强制节点将表达式作为一个单元进行求值,而无需用户进一步输入,因此这将导致节点v4抛出您所看到的错误,并将被节点v6和v4 w / flag正确评估。


这意味着您面临的错误是节点问题,您需要执行以下任一操作:


--harmony_destructuring标志找到一种使Meteor运行节点的方法。
分叉包装并更改有问题的表达式。
分叉并将构建配置添加到软件包中(例如,预发布步骤)。
等待Meteor开始使用Node v6(应该很快发生,因为它现在是稳定的LTS版本)。

10-06 15:40
查看更多