让npm像yarn一样压平所有部门

问题描述 投票:0回答:1

我们在大多数项目中都使用

npm
,除了一个私有模块,我们使用
yarn
来全局管理其他项目中依赖项的版本,这仅仅是因为 npm 没有“足够”地扁平化存储库(不完全像经典纱线那样)。

这是 npm 中的 node_modules 示例:

% npm list ajv
[email protected] /home/me/git/example
└─┬ [email protected]
  └─┬ [email protected]
    └─┬ [email protected]
      └── [email protected]

现在看看纱线的结构:

% npm list ajv
[email protected] /home/me/git/example
├─┬ [email protected]
│ └─┬ [email protected]
│   └─┬ [email protected]
│     └── [email protected]
├── [email protected] extraneous
└─┬ [email protected] extraneous
  └── [email protected] deduped

注意,yarn 愉快地将所有部门移动到根级别。

如果没有扁平化的文件结构,npx 中断和其他子模块只有在传递完整路径以在 node_modules 目录中查找它们时才能访问。

我们尝试过的事情:

  • npm install --legacy-peer-deps
  • npm install --prefer-dedupe
  • npm dedupe
  • npm install  --install-strategy=hoisted
    、嵌套、浅层或链接
  • "flat": true
    添加到 package.json

为了保持一致性,我们想改用 npm,但我们无法使用 npm 获得正确的参数组合来获得与yarn classic相同的结果。

node.js npm node-modules
1个回答
0
投票

如果您的项目需要直接访问 npx 的某些可执行脚本,那么您的项目应该将该依赖项列为其自己的直接依赖项,而不是依赖它作为子依赖项安装。

这主要是设计使然。正如您所注意到的,依赖于

node_modules
中的特定目录结构是脆弱的。你必须让
npm
来管理这件事。

© www.soinside.com 2019 - 2024. All rights reserved.