node.js 中意外的保留字导入
Posted
技术标签:
【中文标题】node.js 中意外的保留字导入【英文标题】:unexpected reserved word import in node.js 【发布时间】:2015-11-27 14:12:06 【问题描述】:我正在尝试运行 node.js 后端服务器。我在 Node.js 文件中导入时收到错误 unexpected reserved word
。
文件core.module.js
中的行是:
'use strict';
import lodashMixins from './lodashMixins.js'
... other imports and configurations ...
我启动简单命令:node core.module.js
这种错误并不少见,但通常发生在其他库中。我还没有看到 Node.js 的解决方案。我应该如何解决这个问题?我正在使用 Windows Server。
编辑:我发现它是 ES6,但我该如何启动它?它看起来像是应用程序的后端,但我不知道应该使用什么命令来启动它而不会出错。
【问题讨论】:
你可以使用babel
之类的东西。一个相关问题link
【参考方案1】:
我在 Visual Studio 之外手动安装任何这些工具时遇到了这个问题。但是 Visual Studio 附带了多个用于现代 Web 开发工作流的开源命令行工具。以下是告诉 Visual Studio 使用手动安装的相同版本的方法
转到工具 -> 选项 -> 项目和解决方案 -> 外部 Web 工具
在内部路径之前设置全局PATH环境变量,你可以使用右上角的箭头来改变顺序。或
首先,找到您已有的 Node.js 安装并在命令行中使用。默认情况下,Node.js 0.12.7 安装到“C:\Program Files\nodejs”。将此条目添加到 node.js 目录的路径的顶部,以强制 Visual Studio 使用该版本【讨论】:
【参考方案2】:import
关键字是 modules feature in ECMAScript 2015 的一部分,还有 export
和其他一些规范。
即使在最新版本 (v0.12.7) 上,它目前也没有在 NodeJS 中原生实现,ES2015 “更友好”的 fork iojs 也不支持它。
您需要使用转译器才能使其工作。
[edit] 尽管存在--harmony_modules
标志,它在最新版本(v5.8)中仍然不受支持,does nothing。正如here 和here 解释的那样,你最好的运行是使用babel
【讨论】:
这是外包项目,所以它是在他们这边构建和运行的。我怎样才能找到转译器?我尝试在整个项目中搜索“babel”或“transpiler”,但一无所获。如果可以提供线索,我可以发布 core.module 的完整代码。我想我可以在不编辑代码的情况下启动它,但不知道如何。 那你为什么不问问他们? 他们也可以在与 SpiderMonkey 一起使用的 NodeJS fork 下运行它。 @Amit,因为他们说他们很忙,拒绝回答问题。如果就这么简单,我不会使用 SO。但我需要弄清楚自己如何运行。 @EugeneObrezkov,对于 UI 部分,他们使用了纯 Node.js。但我会尝试 fork。【参考方案3】:import
是ECMAScript 2015 (ES6) standard
的一部分,正如上面提到的Amit
,它目前还没有在Nodejs 中本地实现。
所以你可以使用像babel
这样的编译器来运行你的es6
脚本
npm install babel
一个基于这个answer的例子
app.js
import helloworld,printName from './es6'
helloworld();
printName("John");
es6.js
module.exports =
helloworld: function() console.log('hello world!'); ,
printName: function(name) console.log(name);
并在 start.js
中使用require hook
require("babel/register");
var app = require("./app.js");
然后启动您的应用程序
node start.js
编辑
以上答案基于babel v5.8.23
。对于babel >= v6
在start.js中使用require hook
作为
require('babel-core/register');
require("./app.js");
此外,默认情况下不启用转换。所以你需要安装一个preset
。在这种情况下使用es2015
npm install babel-preset-es2015
并在根文件夹中的.babelrc
文件中使用它
"presets": ["es2015"]
【讨论】:
在你的例子中 app.js 和 server.js 应该是同一个东西吗? 如果这不起作用,那么只需将破坏到以前版本号的依赖项恢复。就我而言,它是 http-master 模块。 require('babel-core/register');以上是关于node.js 中意外的保留字导入的主要内容,如果未能解决你的问题,请参考以下文章