rollup打包后导出不了类

rollup打包后导出不了类 报这个Uncaught ReferenceError: Cannot access 'Tracker' before initialization

img

打包配置文件

img

html 引入

img

js文件

img

打包umd 出来的文件

img

该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

看起来您正在使用 Rollup 打包 JavaScript 代码,但是打包后的文件无法正确导出类 Tracker,并提示 Uncaught ReferenceError: Cannot access 'Tracker' before initialization 错误。

根据您提供的信息和截图,我看到您在打包配置文件中使用了 @rollup/plugin-replace 插件,该插件将代码中的 process.env.NODE_ENV 替换为实际环境变量值。然而,在您的代码中,类 Tracker 是在条件分支语句中定义的,这可能会导致在某些情况下尝试访问未初始化的类。

您可以尝试以下解决方案:

  1. Tracker 类的定义移动到条件分支语句之外,以确保它在任何情况下都能被正常访问。

  2. 在打包配置文件中的 @rollup/plugin-replace 插件选项中添加一个字符串替换,将所有实例的 process.env.NODE_ENV 替换为真实环境变量值,如下所示:

replace({
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
})

  1. 如果以上两种方法都不起作用,您可以在打包配置文件中添加 @rollup/plugin-commonjs 插件,该插件可以将 CommonJS 模块转换为 ES6 模块,并且可以正确地处理模块中的类定义。请注意,如果您的代码已经是 ES6 模块,则不需要此插件。
import commonjs from '@rollup/plugin-commonjs';

export default {
  input: 'src/index.js',
  output: {
    file: 'dist/bundle.js',
    format: 'umd',
    name: 'MyModule',
    exports: 'named',
  },
  plugins: [
    // ...其他插件
    commonjs(), // 新增插件
  ],
};

希望这些解决方案对您有所帮助!如有帮助,还望采纳哦~