如果包放置在本地,如何避免将包添加到 node_modules

How to avoid adding package to node_modules if it placed locally

我有包含应用程序和模块的存储库。 package.json 将模块包含在应用程序中,如:

"application-module": "file:../modules/application-module"

yarn install 之后,该依赖项添加到 node_modules

我想制作基于模块的应用程序。 app 文件夹重现根模块。 admin-panel-moduleaccount-module 等其他模块应位于 modules 文件夹中。因此,应用程序内部可能有 node_modules,但也有 modules 文件夹用于模块。这些模块将从另一个回购协议中添加 git subtree。所以,这样我就可以独立开发了

有什么办法可以避免添加和使用本地目录吗?

多个 node_modules 和 package.json

在任何 node/npm 项目中,您的目录树中可以有多个 package.json,例如:

app/
  package.json
  node_modules
  src...
  account_module/
    package.json
    node_modules
    src...
  admin_module/
    package.json
    node_modules
    src..

当您在任何 children 模块上调用 yarn(或 npm install ofc)时,在其本地 package.json 中列出的依赖项将安装在 本地node_modules文件夹.

所以基本上您可以解决您的问题,确保每个 children 都有自己的 package.json 及其依赖项。

不过,您 可以 将公共依赖项放在根 app 文件夹中。例如,如果您的所有项目都使用 lodash,您可以将 lodash 依赖项放在添加的 package_json 中。在 app 文件夹中执行 yarn 后, lodash 包将安装在应用程序的 node_modules.

之后,如果您:

require('lodash');

在任何 children 中,如果他们在自己的 [=23] 中找不到 lodash,他们将在应用的 node_modules 文件夹中搜索 lodash =].

如果您没有根 node_modules,您仍然可以声明一个 package.json 局部于任何子模块,它们将有自己的 node_modules

因此,您可能希望完全避免公共依赖项,或者您可能希望将公共依赖项存储在 app 文件夹中。 Npm 是否涵盖了这两种方式。

但是,如果您不想处理常见的依赖关系,又担心必须在本地机器上存储大量重复的包,您可能需要 to checkout pnpm,它是 npm 的包装器,它允许在本地开发机器中节省大量 space。

我遇到了(几乎)与 yarn 相同的问题。

我创建了一个名为 "test" 的包(打字稿)。在这个包中,构建后,主要有 3 个目录:dist(构建后),node_modules 和 src.

然后我创建了另一个包 "test2" 并在这个包中添加了 "test" 作为依赖项 "yarn add c:/.../.../test"。 该软件包安装在 test2 的 node_module 中。但是,在 "test2/node_modules/test" 中,我可以找到测试的 node_modules ( "test2/node_modules/test/node_modules"。为什么?它增加了很多包的大小。

在两个 tsconfig.json(测试和测试 2)中 node_modules 被排除...

感谢