当 ignore-scripts 设置为 true 时,npm 的行为有何不同?

How does npm behave differently with ignore-scripts set to true?

我刚看了一个talk,演讲者推荐运行ning:

npm config set ignore-scripts true

这样 post- 安装脚本和软件包的预安装脚本就不会 运行。这样,您就可以避免恶意包中的病毒。

我的问题是:运行执行此命令后,我是否必须对 npm 安装包做任何不同的事情并让它们在项目中工作?

如果 运行使用 npm 时使用此命令不会带来额外的不便,那么 运行使用它就没有任何缺点。它只会帮助您避免病毒。

如果是这样,为什么不将其设为默认设置?

我问是因为我假设通过忽略包脚本,npm 包的行为会有所不同,并且必须手动执行更多操作。

我同意@RobC 的观点。它还为我完全禁用了我 package.json 中的 运行ning 自定义脚本,这显然是一个交易破坏者,因为你不能再定义和 运行 你的自定义脚本了。

尽管考虑这些安全问题可能会有用,但我认为 运行ning npm config set ignore-scripts true 不是正确的选择。我也 运行 它并最终将其关闭以保持 运行 我的自定义包脚本。

所以视频中的建议最终不太合理,我猜...

当某些依赖项需要 运行 脚本来使用 node-gyp 构建特定于平台的代码时,我遇到了类似的问题。

如果有一个选项可以忽略每个项目的脚本以允许构建特定的脚本,那就太好了。

到目前为止,我决定在 .npmrc 中全局保持 ignore-scripts = true 并在我的项目中使用一个额外的脚本,基本上是这样做的:

#!/bin/bash
set -e

npm explore sqlite3  -- yarn run install
npm explore bcrypt   -- yarn run install

p.s。纱线没有 explore

虽然考虑这些安全问题可能有用,但我认为 运行 npm config set ignore-scripts true 不是正确的选择

如果你想要安全,使用'--ignore-scripts'或者配置设置,也可以使用can-i-ignore-scripts

它可以帮助您找出存在哪些脚本(尤其是当您安装新的依赖项时),但会阻止自动执行与您已使用的新版本库一起出现的新脚本。