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】:

importECMAScript 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.jsserver.js 应该是同一个东西吗? 如果这不起作用,那么只需将破坏到以前版本号的依赖项恢复。就我而言,它是 http-master 模块。 require('babel-core/register');

以上是关于node.js 中意外的保留字导入的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记--保留字

软件构造——制作词法分析器

加var和不加var的区别

关键字和保留字

高分求SQL的全部保留字是哪些?

[20170728]oracle保留字.txt