在Nodejs中使用es6转换类

时间:2016-03-25 05:42:59

标签: node.js gulp browserify babeljs

所以我在我的文件ContrivedExampleA.es6

中有我的示例类
export class Person {
    constructor(name, age) {
        this._name = name;
        this._age = age;
    }

    get name() {
        return this._name;
    }

    get age() {
        return this._age;
    }
}

export class Greeter {
    constructor(person) {
        this._person = person;
    }

    greet() {
        return `Hello ${this._person.name}, I believe you are ${this._person.age} years old!`;
    }
}

我使用以下Gulp任务编译(成功):

var gulp = require('gulp');
var browserify = require('browserify');
var babelify = require('babelify');
var source = require('vinyl-source-stream');

gulp.task('build', function () {
    return browserify({entries: './src/ContrivedExampleA.es6', extensions: ['.es6'], debug: true})
        .transform(babelify)
        .bundle()
        .pipe(source('example.js'))
        .pipe(gulp.dest('build'));
});

所以我想在常规的Nodejs中使用这个代码,所以我做了以下几点:

"use strict";

var Person = require('./example').Person;
var Greeter = require('./example').Greeter;

var person = new Person("Test Person", 25);
var greeter = new Greeter(person);
console.log(greeter.greet());

但是,PersonGreeter都未定义。我甚至尝试在transform-es2015-modules-commonjs文件中加入.babelrc,但该文件没有任何帮助。

我做错了什么?如何将这些已转换的ES6类导入常规Nodejs文件?

修改

我还有一个.babelrc文件,如下所示:

{
  "presets": ["es2015"],
  "plugins": ["transform-es2015-modules-commonjs"]
}

1 个答案:

答案 0 :(得分:0)

忽略我之前的回答,我专注于错误的事情。

如果您想将常规ES6类导入Nodejs文件,您可以跳过浏览器并将所有步骤联合起来,并直接使用gulp-babel插件。我建议也使用gulp-rename

您的ContrivedExampleA.es6文件将保持不变,但您的gulpfile.js将成为:

var gulp = require('gulp');
var babel = require('gulp-babel');
var rename = require('gulp-rename');

gulp.task('build', function () {
    return gulp.src('./src/ContrivedExampleA.es6')
        .pipe(babel({presets: ["es2015"], plugins: ["transform-es2015-modules-commonjs"]}))
        .pipe(rename('example.js'))
        .pipe(gulp.dest('build'));
});

注意:由于你有.babelrc,你可以跳过将选项传递给babel。

然后在您的节点文件中,您只需执行

"use strict";

var Person = require('./example').Person;
var Greeter = require('./example').Greeter;

var person = new Person("Test Person", 25);
var greeter = new Greeter(person);
console.log(greeter.greet());