lerna 未在包中生成 node_module

Ang*_*ant 6 npm typescript package.json lerna monorepo

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

- root 
  package.json
  - packages
      package-A
         package.json
         src
      package-B
         package.json
         src
Run Code Online (Sandbox Code Playgroud)

根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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

每个包的 tsconfig 看起来像

{
  "extends": "../../tsconfig.json",
  "include": ["src/**/*.ts"],
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src",
    "baseUrl": "."
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时lerna bootstraplerna boostrap --hoist包 A 和包 B 中的所有依赖项都会转到根模块。在包级别不会生成 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
Run Code Online (Sandbox Code Playgroud)

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

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

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