npm 重复数据消除 dedupe
减少包树中的重复
概要
npm dedupe
npm ddp
aliases: find-dupes, ddp
描述
搜索本地包树并尝试通过将依赖关系进一步向上移动树来简化整体结构,在那里它们可以被多个依赖包更有效地共享。
例如,考虑这个依赖图:
a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10
在这种情况下, npm-dedupe
将树转换为:
a
+-- b
+-- d
`-- c@1.0.10
由于节点模块查找的分层性质,b 和 d 都将通过树根级别的单个 c 包满足它们的依赖关系。
在某些情况下,你可能有这样的依赖关系图:
a
+-- b <-- depends on c@1.0.x
+-- c@1.0.3
`-- d <-- depends on c@1.0.x
`--c@1.9.9
在安装过程中,c@1.0.3
for的依赖b
被放置在树的根部。尽管d
对 的依赖c@1.x
可以由 满足c@1.0.3
,但c@1.9.0
使用了较新的依赖,因为 npm 默认支持更新,即使这样做会导致重复。
运行npm dedupe
会导致 npm 注意到重复并重新评估,删除嵌套的c
模块,因为 root 中的一个就足够了。
要在安装过程中更喜欢重复数据删除而不是新颖性,请运行 npm install --prefer-dedupe
或npm config set prefer-dedupe true
。
参数被忽略。Dedupe 始终作用于整个树。
请注意,此操作会转换依赖关系树,但永远不会导致安装新模块。
使用npm find-dupes
将以--dry-run
模式运行命令。
配置
global-style 全局风格
- 默认值:
false
- 类型:
Boolean
使 npm 以node_modules
与全局node_modules
文件夹相同的布局将包安装到本地文件夹中。只有您的直接依赖项会显示在其中,node_modules
并且它们所依赖的所有内容都将在其node_modules
文件夹中展平。这显然会消除一些重复数据删除。如果与 一起使用legacy-bundling
,legacy-bundling
将是首选。
legacy-bundling 继承捆绑
- 默认值:
false
- 类型:
Boolean
使 npm 安装包,以便 1.4 之前的 npm 版本,例如 node 0.8 中包含的版本,可以安装该包。这消除了所有自动重复数据删除。如果与global-style
此选项一起使用将是首选。
strict-peer-deps 严格对等依赖
- 默认值:
false
- 类型:
Boolean
如果设置为true
,并且--legacy-peer-deps
未设置,则任何 冲突peerDependencies
都将被视为安装失败,即使 npm 可以根据非对等依赖关系合理猜测适当的解决方案。
默认情况下,peerDependencies
依赖关系图中的深层冲突将使用最近的非对等依赖项规范来解决,即使这样做会导致某些包接收在其包peerDependencies
对象中设置的范围之外的对等依赖项。
当执行此类和覆盖时,会打印警告,解释冲突和所涉及的包。如果--strict-peer-deps
设置,则此警告被视为失败。
package-lock 包锁
- 默认值:
true
- 类型:
Boolean
如果设置为 false,则package-lock.json
在安装时忽略文件。如果为真,这也将阻止写入 。package-lock.json``save
当包包锁被禁用时,无关模块的自动修剪也将被禁用。要删除禁用包锁的无关模块,请使用npm prune
.
omit 省略
- 默认值:如果
NODE_ENV
环境变量设置为production
,则为dev
,否则为空。 - 类型:
dev
、optional
或peer
(可多次设置)
要从磁盘上的安装树中省略的依赖项类型。
请注意,这些依赖的仍然解决,加入 package-lock.json
或npm-shrinkwrap.json
文件。它们只是没有物理安装在磁盘上。
如果包类型同时出现在--include
和--omit
列表中,则它将被包括在内。
如果生成的省略列表包含'dev'
,则NODE_ENV
环境变量将被设置'production'
为所有生命周期脚本。
ignore-scripts 忽略脚本
- 默认值:
false
- 类型:
Boolean
如果为 true,则 npm 不会运行 package.json 文件中指定的脚本。
请注意,明确用于运行特定脚本的命令,例如 npm start
, npm stop
, npm restart
, npm test
, 并且npm run-script
如果ignore-scripts
已设置仍将运行其预期脚本,但它们不会运行任何前置或后置脚本。
audit 审计
- 默认值:
true
- 类型:
Boolean
当为“true”时,将审计报告与当前 npm 命令一起提交到默认注册表和为范围配置的所有注册表。有关npm audit
提交内容的详细信息,请参阅文档。
bin-links bin链接
- 默认值:
true
- 类型:
Boolean
告诉 npm.cmd
为包可执行文件创建符号链接(或Windows 上的垫片)。
设置为 false 使其不这样做。这可以用来解决一些文件系统不支持符号链接的事实,即使在表面上是 Unix 系统上。
fund 资金
- 默认值:
true
- 类型:
Boolean
当“true”在每个结尾处显示消息时,npm install
确认正在寻找资金的依赖项的数量。
dry-run 试运行
- 默认值:
false
- 类型:
Boolean
表示你不希望 npm 进行任何更改并且它应该只报告它会做的事情。这可以被传递到任何修改本地安装,例如,命令的install
,update
, dedupe
,uninstall
,以及pack
和publish
。
注意:这不是由其他网络相关的命令,如兑现dist-tags
, owner
等等。
workspace 工作区
- 默认:
- 类型:
String
(可多次设置)
允许在当前项目的已配置工作区的上下文中运行命令,同时通过仅运行此配置选项定义的工作区进行过滤。
workspace
配置的有效值为:
- 工作区名称
- 工作区目录的路径
- 父工作区目录的路径(将导致选择所有嵌套工作区)
为该npm init
命令设置时,可以将其设置为尚不存在的工作区的文件夹,以创建该文件夹并将其设置为项目中的全新工作区。
此值不会导出到子进程的环境中。
workspaces 工作区
- 默认值:
false
- 类型:
Boolean
启用在所有已配置工作区的上下文中运行命令。
此值不会导出到子进程的环境中。