我如何在公关时间执行严格的同伴依赖?

问题描述 投票:0回答:1
package.json

中)任何shacks

都适用于彼此之间不相容的依赖关系(基于

.npmrc

文档)。
问题是NPM向用户提供了标志,这些标志使他们在设置npm install.
时可以覆盖此选项。
是有一个NPM命令,该命令将检查同行依赖项实际上很严格(因此我可以推断用户没有使用一个覆盖标志来运行)?

Edit以获取额外信息:

我理解的是,用户仍然可以使用以下任何标志运行:
--legacy-peer-deps

no-strict-peer-deps

--force改变了安装算法运行的方式,允许彼此使用库的潜在不兼容版本。 如果我要删除package-lock.json文件并运行

npm install

,据我了解,我会遇到错误,因为我没有以前使用过的标志。

我是否还会在重新结帐时出现错误(而不删除package-lock.json文件),我尚未确认。
    
要设定答案的范围,您实际上无能为力,以防止开发人员使用hacks或弄乱自己的项目本地副本。无论您在存储库中包含什么保护措施,在最坏的情况下,开发人员可以编辑其本地副本并更改它们,甚至完全将其删除。
因此,这个答案的范围是双重的。首先,它旨在最大程度地减少这种“黑客”的错误 - 假设是开发人员不是恶意的,但可能并不总是意识到Depecny管理政策背后的所有考虑因素或实施细节,并且可以使用尽可能多的帮助,因为他们可能不会错误地将其弄乱。其次,它的目的是在CI过程中包括安全措施,以确保开发人员制造的任何PR将继续遵守同一政策。
有几个步骤可以(应该)在这里采取(应该)。
如您指出的那样,您应该使用您期望使用的正确依赖项提交您的
package-lock.json
文件,并在项目的
README.md

CONTRIBUTING.md

中进行文档,该文件应使用而不是
npm ci

使用。如果这些依赖关系是使用非明显或非平凡的标志(例如

npm install

)安装的,请不要将其保留给开发人员使用它们,而要添加它们到
node.js npm dependency-management
1个回答
0
投票
文件中,然后将其提交。有关其他详细信息,请参见


.npmrc

的文档


如果您真的想让开发人员可见,则可以使用使用

npm ci
使用时失败的前安装挂钩,并且只允许
npm install
。 钩本身可以很简单:
npm ci
定义与将其添加到
// preinstall.js
'use strict';
if (process.env.npm_command === 'install') {
    console.error("Don't use 'npm install', use 'npm ci' instead");
    process.exit(1);
}
部分的条目一样简单:
scripts
这不是万无一失的,它总是可以通过运行
package.json
来解决,但是再次,这里的目的不是要阻止开发人员,而是避免出现粗心的错误。
在CI侧,如评论中提到的Estus烧瓶时,应直接向前 - CI应运行

{ "name": "myproject", "version": "1.0.0", "scripts": { "preinstall": "node preinstall.js" }, "dependencies": { "some-dependency": "1.2.3" } }

(因此使用

npm install --ignore-scripts
中定义的依赖项)和测试,如果安装失败或导致测试失败,则应不应合并PR。
为了额外的审查,大多数协作平台都有一种将审阅者分配给特定文件或目录的方法(例如,代码所有者github

Ingitlab

)。您可以定义更改
npm ci
文件(含义依赖关系已更改),需要对某些特定审阅者进行明确责任进行审查,以确保对该文件的任何更改遵守该项目已定义的策略。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.