【问题标题】:Does webpack make ES6 modules compatible with ES5 browsers?webpack 是否使 ES6 模块与 ES5 浏览器兼容?
【发布时间】:2018-11-11 12:36:57
【问题描述】:

如果我在 JS 文件中使用 ES6 导入,例如:

import { tempates } from "./templates.js";

webpack 将此转换为:

__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _templates_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates.js */ "./static/js/templates.js");

这是否意味着我可以使用 ES6 模块并且由于 webpack 的转换它们将也可以在旧的浏览器中工作支持 ES6 模块吗?

如果是:这个 transformation webpack 和一个 babel 之间的区别是什么?描述了 babel 的转换,例如这里: https://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/

在旧版浏览器中ES6 模块兼容性有哪些使用 babel 或 webpack 的优点/缺点


我使用的是 webpack 4.10.2 版本,这是我的 webpack 配置:

var path = require('path');

module.exports = {
    mode: 'development',
    entry: './static/js/mainScript.js',
    output: {
        path: path.resolve(__dirname, 'build'),
        filename: 'asterics-grid.bundle.js'
    }
};

【问题讨论】:

    标签: javascript webpack ecmascript-6 babeljs es6-modules


    【解决方案1】:

    这是否意味着我可以使用 ES6 模块,并且由于 webpack 的转换,它们也可以在不支持 ES6 模块的旧浏览器中工作?

    这是 Webpack 的目的之一。

    这个转换 webpack 做的和一个 babel 做的有什么区别?

    Webpack 是一个打包工具。 Babel 是一个转译器。它们应该一起使用。 Babel transform-es2015-modules-commonjs 转换将 ES 模块转换为 CommonJS 模块。 Node.js 支持 CommonJS 模块,但浏览器不支持。

    在旧浏览器中使用 babel 或 webpack 关于 ES6 模块兼容性的优点/缺点是什么?

    优点是您可以在旧版浏览器中使用 ES 模块。缺点是 Webpack 可能会引入限制,例如如何处理循环依赖。

    【讨论】:

    • 感谢您的回答!因此,如果我理解正确的话,永远不会使用 Babel 来让 ES6 模块在 ES5 浏览器中运行,因为 webpack 正在这样做?
    • 是的。它们是服务于不同目的的不同事物。 Webpack+Babel 或任何其他捆绑器+编译器串联是 ES6 代码通常转换为 ES5 的方式。只有将 ES 模块转换为可以在浏览器 ES5 环境(AMD、SystemJS)中评估的某些模块时,才可以省略捆绑步骤。
    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多