问题
I try to create a class on my node.js / express app.
It works in basic js / prototype mode such as :
function MyClass() {
/* constructor code */
};
MyClass.prototype.myMethod = function() {
/* method code */
};
module.exports = MyClass;
But I want to do use the class, constructor, extends, ... keywords.
I've try that :
class MyClass {
constructor() {
/* constructor code */
}
myMethod() {
/* method code */
}
}
But it doesn't work, the error is :
class MyClass {
^^^^^
SyntaxError: Unexpected reserved word
My command line to launch the app with all harmony options :
node `node --v8-options | grep harmony | cut -d ' ' -f | xargs` my-app.js
An idea to launch my app correctly please ?
回答1:
You can do this with io.js
iojs --use_strict --harmony_classes my-app.js
Or on node.js with traceur
var traceur = require('traceur');
traceur.require.makeDefault(function(file) {
return file.indexOf('node_modules') == -1;
});
require('./my-app').run();
Make sure to test the new features before using them, some are not supported. Edit: You can check the compatibility list from here
回答2:
You need a newer version of nodejs. The class
keyword is supported in 4.4.x, but I'm personally seeing it work in v4.2.6. (Not entirely sure what version of v8 released it, which is what would tell the node version.)
回答3:
I had this problem.
It was caused because I downloaded nodejs' source code than built/ compiled it on my Ubuntu. ./configure
then make
and make install
.
For some reason the ES6 reserved words like class
and extends
were throwing SyntaxError: Unexpected reserved word, even when using --harmony
flag.
It was solved by me downloading the nodejs binaries for linux (https://nodejs.org/download/).
Now class and extends work even without --harmony
flag.
I believe the issue came about from my building/ compiling process. For some reason the ES6 additions were not built or configured properly.
The binaries, to my understanding, are built completely and correctly for linux already and therefore the ES6 is added and configured correctly.
来源:https://stackoverflow.com/questions/27177485/node-js-es6-class-creation-syntaxerror-unexpected-reserved-word