如何在安装新的nodejs依赖关系之前运行脚本

我尝试使用预安装npm脚本,但只有在将项目签出到新空间时才运行,并单独运行“npm i”

我需要一个解决scheme来在新的依赖关系写入package.json 之前运行一个脚本。 它不依赖于依赖types:dev或prod。 他们都需要检查。

例如,当一个新的开发者join到团队中,并且想要添加已知漏洞的新依赖时,这个脚本在package.json被修改之前停止这个动作,并且向开发者显示警告消息

用npm脚本没有办法做到这一点。 所以,除非你觉得要实现一个你将不得不调整你的过程。 首先确定您正在尝试使用on-dependency-install钩子解决的所有问题。

您举例说明阻止依赖或依赖版本的安装。 这不是一个问题 :这是一个你已经确定的问题的解决scheme。 找出真正的问题是什么,然后重新评估你的解决scheme,看看它是否是最合适的措施。

可能(可能)您害怕易受攻击的代码使其生产。 这是您可以使用的问题定义。 有什么可能的解决scheme 你已经确定了黑名单。 但是,不仅仅是你的工具不支持,即使它是你的责任,保持黑名单更新。 鉴于节点世界的移动速度有多快,这足以保证几个人全职工作。 那甚至没有把它部署到你的开发者。

好消息是,这不是唯一的解决scheme:您可以build立程序化的保护措施,防止整合易受攻击的代码。 如果您使用的是像Git这样的分布式VCS,那么pull请求就是正确的:禁止向主分支或开发分支推送提交,让开发人员在特性分支中工作并提交pull请求,然后检查这些pull请求并筛选任何新的依赖关系当他们出现。 如果你正在使用类似SVN的东西,你可以使用function分支与代码评论类似的效果。 您的开发人员会更加关注他们的代码,寻找漏洞,优化和边缘情况等等。 你不会浪费时间来筛选没有人试图集成的依赖关系。 没有人担心获得黑名单的最新副本。 对于这种特殊情况,每个人都可以通过技术解决scheme获得一个stream程解决方

如果您在安装依赖关系时想要启动脚本还有其他原因,请尝试以相同的方式回到问题的根源。 节点依赖性pipe理和模块交互工作的方式,你可能会发现最好是开发更好的stream程习惯。

如果你使用的是git,你可以使用pre-commit / push hooks,结果几乎是一样的,没有代码库的漏洞。

例如赫斯基和nsp,你可以做这样的事情:

{ "scripts": { "prepush": "nsp check" } } 

关于Gabriel的build议,因为你担心开发人员浪费时间,因为他们添加的库失败了一个nsp check …你可以使用编辑器扩展来运行nsp check因为他们的代码。 然后赫斯基做一个预先提交的 nsp check

我还build议Greenkeeper.io在发现之前防止漏洞。

如果主要担心的是这些易受攻击的软件包正在networking中运行(因为无法防止这些软件包通常使用这些软件包),您可以镜像您认为安全的npmregistry的子集,或手动添加已知安全地依赖于该镜像,并在networking级别阻止对主registryhttps://registry.npmjs.org/的访问。 这意味着你的开发人员不得不等待镜像更新,但是在他们能够安装有问题的模块之前,需要至less停下来思考。