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

发布含子模块的TypeScript NPM包:模块及类型声明查找失败

发布CommonJS/ESM混合TypeScript包到NPM的问题解决

问题1:ESM构建无法自动生成.mjs扩展名

手动修改扩展名是可行的,但更推荐用TypeScript原生能力自动生成,避免手动操作出错:

  • 修改构建脚本:在build:esm命令中添加--outFileExtension .mjs参数,让TypeScript直接输出.mjs文件:
    "build:esm": "tsc -p tsconfig.prod.json --module ES2022 --outDir build/esm --outFileExtension .mjs"
    
  • 验证tsconfig配置:确保tsconfig.prod.json(或继承的tsconfig.json)中compilerOptions的module为ES2022/ESNext,moduleResolution为Node16或NodeNext,这是TypeScript正确输出ESM模块的前提。

手动修改扩展名本身合法,但自动生成更可靠,能保持构建流程一致性。

问题2:子模块导入时TypeScript类型报错

报错原因是package.json的exports字段中类型映射配置错误,TypeScript无法定位子模块的类型声明文件。修正步骤如下:

  1. 更新exports中的类型映射:给每个子模块入口添加types字段,替换原来单独的./types相关配置:
    "exports": {
      ".": {
        "import": "./build/esm/index.mjs",
        "require": "./build/cjs/index.js",
        "types": "./build/@types/index.d.ts"
      },
      "./*": {
        "import": "./build/esm/*.mjs",
        "require": "./build/cjs/*.js",
        "types": "./build/@types/*.d.ts"
      },
      "./mult/*": {
        "import": "./build/esm/mult/*.mjs",
        "require": "./build/cjs/mult/*.js",
        "types": "./build/@types/mult/*.d.ts"
      }
    }
    
  2. 调整package.json的types字段:将types设为根模块的类型文件,而非整个目录:
    "types": "build/@types/index.d.ts"
    
  3. 确认类型文件结构:确保build/@types下的文件结构和源文件完全一致(比如mult/multiply.d.ts存在),当前你的构建产物结构符合要求,保持现有build:types脚本不变即可。

完成以上修改后,TypeScript就能正确解析子模块的导入路径和对应的类型声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:14:59