Node.js / ES6 / 类创建:SyntaxError:意外的保留字

15

我尝试在我的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 

如何正确地推出我的应用程序的想法?


5
Node使用的Google的V8引擎 目前还没有发布支持 ES6 class 的版本。通常来说,ES6功能的支持不能被视为 标准已经定案。 (顺便提一下:node --harmony会启用所有可用的Harmony选项。) - Jonathan Lonowski
你解决了吗?因为我也遇到了同样的错误。 - Simon H
是的,所有内容都在之前的评论中。目前您不能使用所有ES6功能。 - ceadreak
你是如何让cut命令在不提供-f参数的情况下正常工作的? - Jeff
3个回答

7
你可以使用io.js来完成这个任务。
iojs --use_strict --harmony_classes my-app.js

或者在使用traceur的node.js上。

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

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

在使用新功能之前,请务必进行测试,因为有些功能可能不受支持。 编辑:您可以从这里查看兼容性列表。


值得注意的是这些开关的顺序很重要 - 文件名必须在开关之后指定,否则您将只收到相同的错误。 - Dan
这并没有真正回答原始问题。 - Petr Peller

7
你需要更新Node.js版本。使用class关键字支持4.4.x版本,但我个人在v4.2.6中看到它也能工作。(不确定是哪个v8版本发布的,这会告诉我们Node.js版本。)

我安装了两个版本的Node。运行“where node”后意识到我使用了错误的版本。 - Hoppe
1
@Hoppe - 你可能想看一下 nodist。它允许你设置一个版本的 node 作为全局默认版本,以及在本地目录中使用不同的版本。我的团队发现它非常有帮助,可以避免版本问题。https://github.com/marcelklehr/nodist - ThatBlairGuy

4

我曾经遇到过这个问题。

问题是因为我下载了nodejs的源代码,然后在我的Ubuntu上进行了构建/编译。使用了./configuremakemake install命令。

由于某种原因,ES6保留字,例如classextends,会抛出SyntaxError: Unexpected reserved word错误,即使使用了--harmony标志也无济于事。

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

现在,即使没有--harmony标志,class和extends也可以正常工作。

我认为这个问题是由于我的构建/编译过程引起的。由于某种原因,ES6添加功能没有被正确地构建或配置。

据我所知,这些二进制文件已经完全正确地构建和配置为Linux,因此ES6已经被正确地添加和配置。


2
你使用的是哪个版本的Node?在Windows上安装的12.6二进制版本似乎无法工作。 - TroyWorks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接