所以我在我的文件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());
但是,Person
和Greeter
都未定义。我甚至尝试在transform-es2015-modules-commonjs
文件中加入.babelrc
,但该文件没有任何帮助。
我做错了什么?如何将这些已转换的ES6类导入常规Nodejs文件?
修改
我还有一个.babelrc
文件,如下所示:
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-commonjs"]
}
答案 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());