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

Nx Monorepo中共享资源与代码的访问配置问题

问题解答

1. 共享图标的正确访问方式

先调整资源复制配置——你的my-lib图标实际存放在libs/my-lib/src/icons目录,不是之前配置的assets,所以修改my-app的project.json中的资源规则:

{
  "glob": "**/*",
  "input": "libs/my-lib/src/icons",
  "output": "assets/my-icons"
}

构建完成后,图标会被复制到dist/apps/my-app/assets/my-icons/路径下,不管是my-app里的comp1还是my-lib里的comp2,模板里用src="assets/my-icons/icon1.svg"就能正常访问。

如果my-lib单独构建时也需要处理图标,在my-lib的project.json中添加同样的资源配置即可——库最终会被应用引入,资源仍会打包到应用的assets目录。

2. 跨项目共享base-models.ts的配置

梳理导出结构

要支持@monkey/my-lib/models的导入路径,先在libs/my-lib/src/models目录下创建index.ts,导出base-models.ts的内容:

export * from './base-models';

也可以在libs/my-lib/src/index.ts中统一导出(可选,方便整体引用):

export * from './models';

配置全局路径映射

在根目录的tsconfig.base.json中添加路径映射,所有项目都会继承该配置,无需逐个项目单独设置:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@monkey/my-lib": ["libs/my-lib/src/index.ts"],
      "@monkey/my-lib/models": ["libs/my-lib/src/models/index.ts"]
    }
  }
}

这样不管是my-app还是其他项目,直接用import { BaseModels } from '@monkey/my-lib/models';就能导入目标代码。

确认Nx依赖关系

在my-app的project.json中,将my-lib添加为依赖:

{
  "dependencies": {
    "@monkey/my-lib": "*"
  }
}

也可以用Nx命令自动添加:nx g nx:dependency --project my-app --dependency my-lib

3. tsconfig.base.json与项目级tsconfig的规范结构

根级别tsconfig.base.json

这是所有项目的基础配置,统一管理全局编译选项,结构示例:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": ".", // 将根目录作为模块解析的基础路径
    "paths": {}, // 全局路径映射,所有项目可继承
    "rootDir": ".", // 可选,指定所有源文件的根目录
    "target": "ES2020",
    "module": "ESNext",
    "moduleResolution": "node",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "exclude": ["node_modules", "dist"] // 排除无需编译的目录
}

项目级tsconfig(如apps/my-app/tsconfig.json)

继承根级配置,仅添加项目特有的选项:

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "../../dist/out-tsc", // 当前项目编译产物的输出目录
    "rootDir": "src", // 当前项目的源文件根目录,编译后会保留源文件的目录结构
    "types": ["node"] // 项目特有的类型依赖,比如Node.js类型
  },
  "include": ["src/**/*"], // 当前项目需要编译的所有文件
  "exclude": ["src/test-setup.ts", "jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
}

关键规则说明

  • paths覆盖:项目级tsconfig的paths会与base中的配置合并,若有相同的路径键,项目级配置会覆盖base的配置。
  • baseUrl:指定模块解析的基础目录,所有相对路径的导入都会基于此目录查找。
  • rootDir:指定编译的源文件根目录,TypeScript会按照源文件的目录结构,将编译后的文件输出到outDir对应的路径下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:47:34