【问题标题】:node.js / ES6 / class creation : SyntaxError: Unexpected reserved wordnode.js / ES6 / 类创建:SyntaxError:意外的保留字
【发布时间】:2015-01-26 10:53:01
【问题描述】:

我尝试在我的 node.js / express 应用上创建一个类。

它可以在基本的 js / 原型模式下工作,例如:

function MyClass() { 
    /* constructor code */
};

MyClass.prototype.myMethod = function() {
    /* method code */
};

module.exports = MyClass;

但我想使用 class、constructor、extends、... 关键字。

我试过了:

class MyClass {
    constructor() {
        /* constructor code */
    }

    myMethod() {
        /* method code */
    }

}

但它不起作用,错误是:

class MyClass {
^^^^^
SyntaxError: Unexpected reserved word

我的命令行启动带有所有和谐选项的应用程序:

node `node --v8-options | grep harmony | cut -d ' ' -f | xargs` my-app.js 

有一个正确启动我的应用程序的想法吗?

【问题讨论】:

  • Google 的 V8 引擎,Node 是基于 hasn't yet released support 为 ES6 classes 构建的。通常,不应将 ES6 功能支持假定为 standard is still in "draft."(旁注:node --harmony 将启用所有可用的 Harmony 选项。)
  • 你解决了吗,因为我有同样的错误?
  • 是的,一切都在前面的评论中。你暂时不能使用所有的 ES6 特性
  • 在不向 -f 提供参数的情况下如何让 cut 命令工作?

标签: javascript node.js express ecmascript-6 ecmascript-harmony


【解决方案1】:

您可以通过io.js 做到这一点

iojs --use_strict --harmony_classes my-app.js

或者在 node.js 上使用traceur

var traceur = require('traceur');
traceur.require.makeDefault(function(file) {
  return file.indexOf('node_modules') == -1;
});

require('./my-app').run();

确保在使用新功能之前对其进行测试,有些是不受支持的。 编辑:您可以从here查看兼容性列表

【讨论】:

  • 值得注意的是,这些开关的顺序很重要 - 文件名必须在开关之后指定,否则您将收到相同的错误。
  • 这并没有真正回答原来的问题。
【解决方案2】:

我遇到了这个问题。

这是因为我下载了 nodejs 的源代码而不是在我的 Ubuntu 上构建/编译它。 ./configure 然后是 makemake install

出于某种原因,classextends 这样的 ES6 保留字会抛出 SyntaxError: Unexpected reserved word,即使使用 --harmony 标志也是如此。

我下载了适用于 linux 的 nodejs 二进制文件 (https://nodejs.org/download/) 解决了这个问题。

即使没有--harmony 标志,现在也可以进行类和扩展工作。

我相信问题出在我的构建/编译过程中。由于某种原因,未正确构建或配置 ES6 附加功能。

据我了解,二进制文件已经为 linux 完全正确地构建,因此 ES6 已正确添加和配置。

【讨论】:

  • 您使用的是什么版本的节点? windows上的12.6二进制版本好像不行
【解决方案3】:

您需要更新版本的 nodejs。 class 关键字是 supported in 4.4.x,但我个人认为它在 v4.2.6 中有效。 (不完全确定是哪个版本的 v8 发布的,这会告诉节点版本。)

【讨论】:

  • 我安装了两个版本的节点。跑“where node”并意识到我用错了
  • @Hoppe - 你可能想看看 nodist。它允许您将节点的一个版本设置为全局默认值,并将另一个版本设置为在本地目录中使用。我的团队发现它对于避免版本控制麻烦非常有帮助。 github.com/marcelklehr/nodist
猜你喜欢
  • 2017-04-07
  • 2022-06-10
  • 2021-05-15
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2021-12-08
相关资源
最近更新 更多