如何在安装新的nodejs dependeny之前运行脚本

时间:2017-10-06 08:22:21

标签: node.js npm

我尝试使用preinstall npm脚本,但它只在我将项目签入新空间时运行,然后运行" npm i"独立的

我需要一个解决方案来运行脚本 ,然后 将新的依赖项写入package.json。它并不依赖于依赖类型:dev或prod。所有人都需要检查。

例如,当新开发人员加入团队并希望添加具有已知漏洞的新依赖项时,此脚本会在package.json更改之前停止操作,并显示开发人员的警告消息

4 个答案:

答案 0 :(得分:2)

使用npm脚本无法做到这一点。因此,除非您感觉implementing one,否则您将不得不调整您的流程。首先确定您尝试使用on-dependency-install挂钩解决的所有问题。

您举例说明是否阻止安装依赖项或依赖项版本。这不是问题:它是您已确定 问题的解决方案。弄清楚实际问题是什么,然后重新评估您的解决方案,看看它是否真的是最合适的措施。

可能(可能)你害怕易受攻击的代码使其投入生产。 那是您可以使用的问题定义。有哪些可能的解决方案你已经确定了黑名单。但是,不仅您的工具不支持,即使它 ,那么您仍有责任使黑名单保持最新状态。考虑到Node世界的移动速度,这足以让几个人全职工作。而且甚至没有将其部署到开发人员身上。

好消息是,这不是唯一的解决方案:您可以建立针对集成易受攻击代码的程序保护措施。如果您正在使用像Git这样的分布式VCS,拉取请求就在那里:禁止将提交推送到主服务器或开发分支,让开发人员在功能分支中工作并提交拉取请求,然后查看这些拉取请求并筛选任何新的漏洞依赖项当他们出现时。如果您使用的是SVN之类的东西,您可以使用功能分支和代码审查来达到类似的效果。您的开发人员会更多地关注他们的代码,寻找漏洞,优化,边缘情况等等;你不要浪费时间筛选没有人试图整合的依赖关系。并且没有人担心获取黑名单的最新副本。对于这种特殊情况,每个人都可以通过技术解决方案获得流程解决方案。

如果在安装依赖项时有其他原因需要触发脚本,请尝试以相同的方式返回问题的根目录。 Node依赖管理和模块交互的工作方式,您可能会发现开发更好的流程习惯更为可取。

答案 1 :(得分:2)

如果你正在使用git,你可以使用pre-commit / push hooks,结果几乎相同,代码库中没有漏洞。

例如,使用huskynsp,您可以执行以下操作:

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

答案 2 :(得分:0)

重写Gabriel的建议,因为你担心开发人员浪费时间,当他们添加的lib失败时nsp check ...你可以使用editor extension来运行nsp check码。然后让赫斯基做一个前提交 nsp check

我还建议Greenkeeper.io在发现漏洞之前预防漏洞。

答案 3 :(得分:0)

如果主要担心的是这些易受攻击的软件包在您的网络中运行(因为无法阻止这些软件包一般使用这些软件包),您可以镜像您认为安全的npm注册表的子集,或者手动将已知的安全依赖项添加到该镜像,并阻止在网络级别访问主注册表https://registry.npmjs.org/。这意味着你的开发人员一直在等待镜像更新,但是在他们能够安装有问题的模块之前,需要有人至少停下来思考。