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

如何在NX monorepo中移除包导入路径里的src目录?

移除NX多包项目导入路径中的src目录

要实现直接通过import { ... } from 'my-proj1'导入模块,无需在路径中添加src,按以下步骤操作:

1. 配置my-proj1的package.json

修改packages/my-proj1/package.json,添加或调整字段明确包的入口与导出规则:

{
  "name": "my-proj1",
  "main": "./dist/index.js", // 编译后的JS入口
  "types": "./dist/index.d.ts", // 类型定义文件入口
  "exports": {
    ".": {
      "import": "./dist/index.js",
      "require": "./dist/index.js",
      "types": "./dist/index.d.ts"
    },
    "./*": {
      "import": "./dist/*.js",
      "require": "./dist/*.js",
      "types": "./dist/*.d.ts"
    }
  }
  // 保留原有其他配置
}

若需支持开发时直接引用src文件(无需预编译),可在exports中追加开发环境映射:

"exports": {
  ".": {
    "development": "./src/index.ts",
    "import": "./dist/index.js",
    "require": "./dist/index.js",
    "types": "./dist/index.d.ts"
  },
  "./*": {
    "development": "./src/*.ts",
    "import": "./dist/*.js",
    "require": "./dist/*.js",
    "types": "./dist/*.d.ts"
  }
}

2. 在my-proj1的src目录创建入口文件

在packages/my-proj1/src/index.ts中统一导出需对外暴露的模块:

// 示例:导出src下的核心模块
export * from './modules/foo';
export * from './utils/bar';

若需支持单个文件的直接导入(如import { Baz } from 'my-proj1/utils/baz'),可在对应子目录创建index.ts导出目标模块,或依赖package.json的通配符映射。

3. 配置my-proj1的tsconfig.json

确保编译配置正确,将产物生成到dist目录:

{
  "compilerOptions": {
    "outDir": "./dist",
    "declaration": true, // 生成类型定义文件
    "declarationMap": true
    // 保留原有其他配置
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

4. 重新编译并验证

执行NX编译命令构建my-proj1:

nx build my-proj1

之后在my-proj2的代码中即可使用简化路径导入:

// 替代原有的 'my-proj1/src'
import { Foo, Bar } from 'my-proj1';
// 若配置子路径映射,可直接导入子模块
import { Baz } from 'my-proj1/utils/baz';

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:16:03