Lerna + TypeScript + npm:如何正确设置配置以便 @projectName/package 路径通过 dist 目录?

Cha*_*nce 5 node.js npm typescript lerna

我正在尝试将我的项目设置为 monorepo,但我遇到了使用 TypeScript 和 Lerna 进行路径处理的烦人问题。

我有 2 个 React 项目、一个 API 和一个存储我的域模型和打字稿定义的核心项目。目前,我需要能够在我的 API 中使用核心代码以及我的 2 个 React 项目中的定义。

我遇到的问题是我必须从每个包的根路径。例如, @projectName/core/src/models/myModel代替@projectName/core/models/myModel. 该dist目录不包含该结构,这就是我要导入的内容。

我找到了几篇建议如何设置它的文章,但我仍然遇到问题并且不确定我哪里出错了。

我现在只专注于导出@projectName/core.

./tsconfig.json

{
  "exclude": ["node_modules", "dist"],
  "compilerOptions": {
    "baseUrl": ".",
    "sourceMap": true,
    "composite": true,
    "declaration": true,
    "paths": {
      "@projectName/core": ["packages/core/src"],
      "@projectName/api": ["packages/api/src"],
      "@projectName/admin": ["packages/admin/src"],
      "@projectName/client": ["packages/client"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

./package.json

{
  "name": "projectName",
  "private": true,
  "devDependencies": {
    "lerna": "^3.20.2",
    "typescript": "^3.8.3"
  }
}
Run Code Online (Sandbox Code Playgroud)

./packages/core/tsconfig.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "lib": ["ES2019"],
    "module": "commonjs",
    "target": "ES2019",
    "strict": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },

  "include": ["src/**/*"]
}
Run Code Online (Sandbox Code Playgroud)

./packages/core/package.json

{
  "name": "@projectName/core",
  "version": "0.0.1",
  "private": true,
  "directories": {
    "lib": "dist",
    "test": "tests"
  },
  "files": [
    "dist"
  ],
  "scripts": {
    "build": "npm run clean && npm run compile",
    "clean": "rm -rf ./dist",
    "compile": "tsc"
  },
  "dependencies": {
  },
  "devDependencies": {
    "typescript": "^3.8.3",
    "webpack": "^4.43.0",
  }
}
Run Code Online (Sandbox Code Playgroud)

./packages/api/tsconfig.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "lib": ["ES2019"],
    "module": "commonjs",
    "target": "ES2019",
    "strict": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist"
  },
  "include": ["src/**/*"]
}
Run Code Online (Sandbox Code Playgroud)

./packages/api/package.json

{
  "name": "@projectName/api",
  "version": "0.0.1",
  "description": "api",
  "files": [
    "dist"
  ],
  "main": "dist/server.js",
  "scripts": {
  },
  "dependencies": {
    "@packageName/core": "^0.0.1",
  },
  "devDependencies": {
    "typescript": "^3.8.3",
    "webpack": "^4.43.0",
    "webpack-node-externals": "^1.7.2"
  },
  "private": true
}
Run Code Online (Sandbox Code Playgroud)

小路

我从上面删除了依赖项以保持可读性。

添加这些设置是为了./tsconfig.json使其工作:

    "composite": true,
    "declaration": true
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。谢谢!