使用rollup打包,希望通过babel转译node_modules中的代码,但是没有生效?

rollup.config.mjs中的babel配置如下:

babel({
      extensions: ['.js', '.jsx', '.mjs'],
      presets: ['@babel/preset-env'],
      babelHelpers: 'runtime',
      include: ['src/**/*', 'node_modules/@xyflow/**/*'],
    }),

babel.config.json的配置如下:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": false,
        "useBuiltIns": "usage",
        "corejs": "3",
        "targets": {
          "ie": 11
        }
      }
    ],
    "@babel/preset-react"
  ],
  "plugins": [
    [
      "@babel/plugin-transform-runtime",
      {
        "corejs": 3,
        "helpers": true,
        "regenerator": true,
        "babelHelpers": "runtime"
      }
    ],
    ["@babel/plugin-proposal-class-properties"],
    ["@babel/plugin-proposal-nullish-coalescing-operator"]
  ]
}

我希望达到的效果是将@xyflow包中的“??”语法转换,按照上面的配置打包后,文件中依旧包含“??”语法,希望各位大佬解惑

"rollup": "4.22.5",
"@babel/core": "7.25.2",
    "@babel/plugin-proposal-class-properties": "7.18.6",
    "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
    "@babel/plugin-transform-react-jsx": "7.25.2",
    "@babel/plugin-transform-runtime": "7.25.4",
    "@babel/preset-env": "7.25.4",
    "@babel/preset-react": "7.24.7",
    "@babel/runtime-corejs3": "7.25.6",
阅读 1.6k
2 个回答

自问自答吧,在babel的plugin中加了个函数,打印了下输出的文件路径,最终定位问题是匹配的规则不对,调整include为

include: ['src/**/*', /node_modules\/((?:.*[/\\])?@xyflow(?:[/\\].*)?)/],

了,路径截图如下:
image.png
image.png

你遇到的问题应该与配置设置有关。

检查在babel.config.json中,配置能够正确处理nullish coalescing operator。检查插件@babel/plugin-proposal-nullish-coalescing-operator是最新版本,并且在Babel的执行过程中被正确加载。

rollup.config.mjs中,include选项应该确保Babel能够处理node_modules/@xyflow/**/*中的文件。考虑添加exclude: 'node_modules/**'避免不必要的转译。

babel({
  extensions: ['.js', '.jsx', '.mjs'],
  presets: ['@babel/preset-env'],
  babelHelpers: 'runtime',
  include: ['src/**/*', 'node_modules/@xyflow/**/*'],
  exclude: 'node_modules/**'
}),

确认Babel配置中的useBuiltIns: "usage"能够正确引入polyfills。考虑显式安装引入 core-js

npm install core-js

并在入口文件引入

import "core-js/stable";
import "regenerator-runtime/runtime";

确认所有相关依赖项(比如Rollup, Babel和一些插件)的版本兼容性。

考虑启用调试输出,
或者考虑手动测试,创建一个文件,使用??语法,检查打包后的文件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏