You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React UI库Rollup打包后导入报错:导出缺失与process未定义问题求助

React UI库Rollup打包后导入报错:导出缺失与process未定义问题求助

大家好,我目前正在开发一个React UI组件库,用Rollup做打包工具,只把Vite用来跑开发服务器。打包完成后我想测试下打包后的文件能不能正常运行,结果导入的时候遇到了两个头疼的问题,折腾了好一阵没解决,想请教下各位大佬!

问题1:导入CJS格式包提示导出缺失

我在测试的App.tsx里这么导入模块:

import { myModule } from '../dist/cjs/index';

结果直接抛出错误:

requested module '/dist/cjs/index.js' does not provide an export named 'my-----module'

但我去查看../dist/cjs/index.js文件,明明里面有我要导出的myModule模块,实在搞不懂为什么导入的时候会提示找不到。

问题2:导入ESM格式包提示process is not defined

尝试换成导入ESM版本的打包文件:

import { myModule } from '../dist/esm/index';

结果又出现新错误,指向path.js中的这一行代码:

process.platform === 'win32'
错误提示为process is not defined

我的相关配置文件

Rollup配置 (rollup.config.js)

import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import typescript from "@rollup/plugin-typescript";
import postcss from "rollup-plugin-postcss";
import dts from "rollup-plugin-dts";
import json from '@rollup/plugin-json'

const packageJson = require("./package.json");

export default [
  {
    input: "src/index.ts",
    output: [
      {
        file: packageJson.main,
        format: "cjs",
        sourcemap: true,
      },
      {
        file: packageJson.module,
        format: "esm",
        sourcemap: true,
      },
    ],
    plugins: [
      resolve(),
      commonjs(),
      typescript({ tsconfig: "./tsconfig.json" }),
      postcss(),
      json()
    ],
  },
  {
    input: "dist/esm/types/index.d.ts",
    output: [{ file: "dist/index.d.ts", format: "esm" }],
    plugins: [dts(),json()],
    external: [/\.(css|less|scss)$/],
  },
];

tsconfig.json配置

{
  "compilerOptions": {
    "useDefineForClassFields": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "target": "esnext",
    "lib": ["dom", "DOM.Iterable", "ESNext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "baseUrl": ".",
    "typeRoots": ["node_modules/@types/"],
    "paths": {
      "@models/*" : ["src/models/*"],
      "@constants/*" : ["src/constants/*"],
      "@components/*" : ["src/components/*"],
      "@abi/*" : ["src/abi/*"],
      "@styles/*": ["src/styles/*"],
      "@utils/*": ["src/utils/*"],
      "@assets/*" : ["src/assets/*"],
      "@core/*" : ["src/core/*"],
      "@contexts/*" : ["src/contexts/*"],
      "@hooks/*" : ["src/hooks/*"],
      "@HOC/*" : ["src/HOC/*"]
    },
    "jsx" : "react-jsx",
    "module" : "esnext",
    "declaration" : true,
    "declarationDir" : "types",
    "sourceMap" : true,
    "outDir" : "dist",
    "moduleResolution" : "Node",
    "allowSyntheticDefaultImports": true,
    "emitDeclarationOnly": true
  },
  "include": ["src", "test/main.tsx", "test/App.tsx"],
  "references": [{ "path": "./tsconfig.node.json" }],
  "exclude": ["dist","node_modules","test"],
}

打包命令与测试代码

我的打包命令在package.json中定义为:

"build" : "rollup -c"

测试用的App.tsx代码:

import { myModule } from '../dist/cjs/index';

function App() {
  console.log(myModule);
  const mW = new myModule();
  return <>{mW!.render()}</>;
}

export default App;

我谷歌搜了一圈,没找到太贴合我这个场景的解决方案,希望各位能给点建议或者帮助,真的非常感谢!

备注:内容来源于stack exchange,提问作者Justin Seo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:29:38