【发布时间】:2016-05-03 22:34:08
【问题描述】:
我在单独的文件中有 2 个类(ES2015 类样式)和一个带有 require 的 App 文件。我想在浏览器中使用这个 CommonJS 模块。最流行的 lib 是 Browserify,它带有用于 ES2015 语法的 Babel 编译器(babelify)。 示例:
Class1.js
class Class1 {
constructor() {
this.prop = 1;
}
method() {
console.log(this.prop);
}
}
module.exports = Class1;
Class2.js
class Class2 {
constructor() {
this.prop = 2;
}
method() {
console.log(this.prop);
}
}
module.exports = Class2;
App.js
var Class1 = require('./Class1');
var Class2 = require('./Class2');
class App {
constructor() {
this.class1 = new Class1();
this.class2 = new Class2();
}
}
module.exports = App;
gulpfile.js
gulp.task("js", function () {
browserify({ entries: config.js.appFile, extensions: ['.js'], debug: true })
.transform(babelify)
.bundle()
.pipe(source(config.js.appMinFile))
.pipe(gulp.dest('.'));
});
结果 app.js 中的问题。它包含每个模块中每个类的重复代码。
var _createClass = function () { ... }
function _classCallCheck(instance, Constructor) { ...}
function _possibleConstructorReturn(self, call) { ... } //not for example above but can exists
function _inherits(subClass, superClass) { ... } //not for example above but can exists
如何在源 js 文件的 sourcemap 支持 中删除此重复代码?
我尝试在没有 Babelify 转换的情况下将所有 js 文件合并为一个,然后使用 Babel 编译结果。它可以在没有重复代码的情况下工作,但 sourcemap 会不正确。
【问题讨论】:
-
您这样做是为了解决什么问题?
-
我想使用带有 ES2015 语法的 CommonJS 模块系统,在浏览器中进行简单的调试。
-
在转译之前尝试捆绑。
-
你在使用任何新的 ES6 原型方法吗?最简单的方法是使用
babel-plugin-transform-runtime/babel-runtime而不是babel-polyfill。 -
“任何新的 ES6 原型方法”是什么意思?你能写一个例子吗?
标签: javascript ecmascript-6 browserify babeljs commonjs