在我的Monorepo内部,我有一个软件包,我希望在其中的node_modules中包含所有依赖项。

但是无论我做什么,它的node_modules仍然为空。

因此,出于我的问题,我能够通过以下设置重现该问题

/
 package.json
 lerna.json
 node_modules
 packages/
          A/
            node_modules
            package.json
            index.ts
          B/
            node_modules
            package.json
            index.ts


我为此创建了一个repo

主package.json

{
  "name": "A-B-test",
  "private": true,
  "workspaces": {
    "packages": ["packages/*"],
    "nohoist": [ "**/B" ]
  },
  ...
  "devDependencies": {
    "lerna": "^3.13.4"
  }
}


B/package.json看起来像

{
  "name": "@scaljeri/B",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "angular": "^1.7.8"
  },
  "devDependencies": {
    "browserify": "^16.2.3",
    "typescript": "^3.5.2"
  }
}


现在,当我在项目的根目录中运行yarn时,所有依赖项都将安装在根node_modules中。

纱线版本:1.16.0
节点:12.4.0

有什么建议可能是什么问题?

最佳答案

以我的经验,有必要以以下方式双重指定每个软件包:

{
  "nohoist": [
    "**/B",
    "**/B/**,
    "**/C",
    ***/C/**
  ]
}


另外,我发现有必要在修改node_modules设置后删除所有现有的nohoist文件夹。因此,如果您的项目位于packages中,并且位于项目目录中,则可以删除所有这些node_modules文件夹,如下所示:

# delete node_modules on linux
rm -rf ./packages/*/node_modules
rm -rf ./node_modules

# install again
yarn install --check-files

09-25 18:55