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。
答案 0 :(得分:1)
Meteor不会将node_modules
中的任何文件编译为ES5。这意味着代码运行不变。这就是你在运行时而不是在构建过程中得到错误的原因。
Meteor v1.4.2.x使用节点v4.6.2(您可以使用meteor node --version
检查节点版本。)
此版本的节点通常不支持解构赋值(const {foo} = ...
语法)。这需要使用--harmony_destructuring
标志。您可以通过运行版本4.x与6.x的节点shell(REPL)轻松地测试它。
在3个终端会话中键入以下内容:
$ meteor node
$ meteor node --harmony_destructuring
$ node
,当节点在v6 + 代码:
let bar = () => ({foo: 3}); // 1
let { foo } = bar(); // 2
eval("let { foo } = bar();"); // 3
这意味着您遇到的错误是节点问题,您需要:
--harmony_destructuring
标志的节点。答案 1 :(得分:0)
这里有一个关于babel-runtime的故事,这对我来说似乎有点混乱,但我认为解决方案是做
meteor npm install --save babel-runtime
https://forums.meteor.com/t/meteor-1-4-2-1-is-an-important-patch-for-1-4-2-users/31190
答案 2 :(得分:0)
Meteor拒绝对node_modules
中的内容做任何事情,以为这些软件包应该已经可以分发了。
但是越来越多的npm
软件包在打包前没有从ES6进行转译,因此Meteor被迫迁移到look into this。
对于不需要修改解决方案的软件包来说,这很容易(一旦知道):
从node_modules/<package>
到应用程序中的某个位置(可能是import
)建立符号链接。没有流星认为这是您的应用程序中的代码,并且可以执行所需的任何操作。