【问题标题】:unexpected reserved word import in node.jsnode.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

标签: javascript node.js ecmascript-6 importerror


【解决方案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。正如herehere 解释的那样,你最好的运行是使用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');
    猜你喜欢
    • 2016-08-16
    • 2015-01-26
    • 2016-02-16
    • 2017-04-07
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多