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

使用Rollup打包TypeScript库后出现命名导出找不到的问题

解决Rollup打包TS库时CommonJS模块命名导出错误的方案

问题根源

crypto-js、ts-luxon属于CommonJS模块,当你的库以ES模块(ESM)格式输出时,Rollup默认不会处理外部CommonJS模块的导出结构,导致生成的ESM代码尝试从这些模块读取命名导出,但ES模块加载器无法将CommonJS的module.exports识别为标准命名导出,从而抛出错误。

具体解决步骤

1. 配置Rollup的CommonJS处理插件

安装@rollup/plugin-commonjs插件,让它明确映射外部CommonJS模块的命名导出:

npm install @rollup/plugin-commonjs --save-dev

在Rollup配置文件中添加插件(需放在TypeScript插件之后):

import commonjs from '@rollup/plugin-commonjs';

export default {
  // 你的其他Rollup配置(如external、input等)
  plugins: [
    // ...typescript() 等其他插件
    commonjs({
      namedExports: {
        // 列出你在库中用到的crypto-js命名导出
        'crypto-js': ['enc', 'SHA256', 'AES'],
        // 列出你用到的ts-luxon命名导出
        'ts-luxon': ['DateTime', 'Duration']
      }
    })
  ],
  output: [
    // 你的原有输出配置
    {
      file: `dist/kik-uc-common-fe.umd.min.js`,
      name: "ucApiNestCommonFe",
      format: "umd",
      sourcemap: false,
      plugins: [terser()]
    },
    {file: `dist/kik-uc-common-fe.es6.min.mjs`, format: "esm", sourcemap: false, plugins: [terser()]}
  ]
};

2. 调整库的TypeScript配置

确保tsconfig.json开启CommonJS兼容选项:

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    // 其他配置...
  }
}

esModuleInterop和allowSyntheticDefaultImports会让TypeScript生成更兼容CommonJS模块的ESM代码。

3. 优化package.json的exports字段

明确区分ESM和CommonJS入口,帮助消费端正确加载对应格式:

"exports": {
  ".": {
    "types": "./index.d.ts",
    "import": "./kik-uc-common-fe.es6.min.mjs",
    "require": "./kik-uc-common-fe.umd.min.js",
    "default": "./kik-uc-common-fe.umd.min.js"
  }
}

临时兼容方案(不推荐长期使用)

如果暂时无法修改库的打包配置,可让消费端改用默认导入后解构的方式:

// 替代原来的命名导入
import cryptoJs from 'crypto-js';
const { enc } = cryptoJs;

import luxon from 'ts-luxon';
const { DateTime } = luxon;

内容的提问来源于stack exchange,提问作者Sampgun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:28:09