[英]Browserify and ES6/ES2015 classes (babel compiler)
我在单独的文件中有2个类(ES2015类样式),在一个文件中有require。 我想在浏览器中使用此CommonJS模块。 最受欢迎的库是带有ES2015语法的Babel编译器的Browserify(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文件的支持来删除此重复代码?
我尝试了在没有Babelify转换的情况下将Browserify合并为所有js文件,然后使用Babel编译结果。 它可以在没有重复代码的情况下工作,但是sourcemap将不正确。
简单的答案是,您应该npm install babel-plugin-transform-runtime babel-runtime
,然后包括
"plugins": ["transform-runtime"]
.babelrc
的"presets": ["es2015"]
旁边"presets": ["es2015"]
配置。
确切的答案取决于您希望Polyfill函数如何工作。 Babel提供babel-polyfill
作为全局加载babel-polyfill
一种方式,它将在整个应用程序中添加ES6库功能。 但是,这可能与上面的transform-runtime
的默认行为相冲突,后者的默认行为是尝试将对全局变量的引用指向babel-runtime
模块。 这意味着您可能会意外地加载了两个相同填充API的副本。
如果您希望/需要使用babel-polyfill
因为它在全球范围内提供了大量的标准ES6功能,包括诸如Array.prototype.includes
类的全局原型方法,则应在插件中添加其他参数:
"plugins": [ ["transform-runtime", {polyfill: false, regenerator: false}], ]
如果您不想使用像babel-polyfill
这样的全局污染babel-polyfill
,可以在babel-runtime
使用polyfilling逻辑。 例如,如果您正在编写一个独立的库并且不想让所有用户为您加载babel-polyfill
或从该库中更改全局变量,那么这很重要。
"plugins": [ "transform-runtime", ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.