gpt4 book ai didi

javascript - Browserify 和 ES6/ES2015 类(babel 编译器)

转载 作者:行者123 更新时间:2023-11-30 16:19:01 25 4
gpt4 key购买 nike

我有 2 个类(ES2015 类样式)在单独的文件中,一个 App 文件需要。我想在浏览器中使用这个 CommonJS 模块。最流行的库是 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;

gulp文件.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 将不正确。

最佳答案

简单的答案是你应该npm install babel-plugin-transform-runtime babel-runtime然后包含

"plugins": ["transform-runtime"]

在你的 .babelrc 和你的 "presets": ["es2015"] 配置中。

确切的答案取决于您希望 polyfill 函数如何工作。 Babel 提供了 babel-polyfill 作为全局加载 polyfill 的方式,该 polyfill 将在整个应用程序中添加 ES6 库函数。然而,这可能与上面 transform-runtime 的默认行为冲突,后者将尝试将对全局变量的引用指向 babel-runtime 模块。这意味着您可能会意外地加载相同的 polyfilled API 的两个副本。

  1. 如果您想要/需要使用 babel-polyfill,因为它在全局范围内提供了大量标准 ES6 功能,包括全局原型(prototype)方法,如 Array.prototype.includes ,那么您应该向您的插件添加额外的参数:

    "plugins": [
    ["transform-runtime", {polyfill: false, regenerator: false}],
    ]
  2. 如果您不想使用像 babel-polyfill 这样的全局污染 polyfill,您可以使用 babel-runtime 中的 polyfilling 逻辑。如果你正在编写一个独立的库并且不想让你的所有用户为你加载 babel-polyfill 或者从库中更改全局变量,这可能很重要,这是一个坏主意。

    "plugins": [
    "transform-runtime",
    ]

关于javascript - Browserify 和 ES6/ES2015 类(babel 编译器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35029498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com