javascript - 如何使用 babel 预设环境保留动态导入语句?

标签 javascript webpack babeljs dynamic-import

我正在创建包含用于代码拆分的动态导入的共享模块。
我有如下代码:

import('./moduleA').then(/* do stuff */)
然而,babel 将其编译为延迟要求,从而阻止 Webpack 进行代码拆分。
转换后的结果如下:
Promise.resolve().then(() => require('./moduleA')).then(/* do stuff */)
我的 .babelrc.json很简单,只包含:
{
  "presets": ["@babel/preset-env"]
}
如何在我的 babel 转换代码中保留动态导入?

最佳答案

发生这种情况是因为 @babel/preset-env默认包含一个插件,@babel/plugin-proposal-dynamic-import ,这会改变动态导入。
有两种方法可以阻止这种情况。
选项一(推荐)
您可以排除插件@babel/plugin-proposal-dynamic-import所以import()声明保持不变。使用以下内容更新您的预设选项:

{
  "presets": [["@babel/preset-env", { "exclude": ["proposal-dynamic-import"] }]]
}
选项二
在预设选项中添加 "modules": false ,但是这也将保留 ES 模块导入/导出语句。
{
  "presets": [["@babel/preset-env", { "modules": false }]]
}

这些 GitHub 问题中对此进行了深入描述:
  • https://github.com/babel/babel/issues/11204
  • https://github.com/babel/babel/issues/10194
  • 关于javascript - 如何使用 babel 预设环境保留动态导入语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63563485/

    相关文章:

    javascript - 使用restangular从json对象数组中获取具有特定条件的json对象

    Javascript 从 JSON 文件中获取值

    javascript - 单击 div 时,Anchor #Tag 将整个页面向上移动

    javascript - Angular 6/Javascript - 在 (nglick) 中调用两种方法。组件和Js

    javascript - 在 webpack 中加载 javascript

    javascript - 使用 Webpack 延迟加载 Angular 模块

    testing - 你如何配置 babel 以在不同的环境中以不同的配置运行

    javascript - Babel 在哪个目录中寻找插件?

    javascript - ES6 语法的未知含义

    javascript - 使用 webpack 或 node.js 编译器包装所有函数和方法