首页 > 解决方案 > lerna 没有在包中生成 node_module

问题描述

我有一个带有 Lerna 的 monorepo 和具有基本结构的 typescript

- root 
  package.json
  - packages
      package-A
         package.json
         src
      package-B
         package.json
         src

根 package.json tsconfig 配置

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "sourceMap": true,
    "allowSyntheticDefaultImports": true,
    "paths": {
      "@namespace/*": [
        "packages/*/src"
      ]
    },
    "esModuleInterop": true,
    "skipLibCheck": true,
    "types": [],
    "typeRoots": [
      "./node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "dist"
  ]
}

每个包的 tsconfig 看起来像

{
  "extends": "../../tsconfig.json",
  "include": ["src/**/*.ts"],
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src",
    "baseUrl": "."
  }
}

现在,当我运行包 A 和包 B 中的所有依赖项lerna bootstraplerna boostrap --hoist所有依赖项时,都会转到根模块。在包级别不会生成 node_modules 文件夹。

这是正常的行为吗?

同样在开发中,在包中我有一个运行的 nodemon 脚本ts-node -r tsconfig-paths/register ./src/index.ts

当我直接从命令行运行 nodemon 时,我得到

sh: ts-node: command not found
[nodemon] failed to start process, "ts-node -r tsconfig-paths/register ./src/index.ts" exec not found

但是当我将它作为脚本添加到包的 package.json 中"start:dev": "nodemon"时,npm run start:dev它就可以工作了。

这就像 nodemon 抱怨ts-node在包的 node_modules/.bin 中找不到二进制文件(因为它没有生成),但是当我使用它运行它时,start:dev它会从根 node_modules 中获取它。

我在设置中错过了什么吗?

标签: typescriptnpmpackage.jsonlernamonorepo

解决方案


推荐阅读