将忽略脚本设置为 true 时,npm 的行为有何不同?

Posted

技术标签:

【中文标题】将忽略脚本设置为 true 时,npm 的行为有何不同?【英文标题】:How does npm behave differently with ignore-scripts set to true? 【发布时间】:2020-04-15 17:23:34 【问题描述】:

我刚刚看了一个talk 演讲者推荐跑步的地方:

npm config set ignore-scripts true

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

我的问题是:运行此命令后,我是否必须对 npm install packages 执行不同的操作并让它们在项目中工作?

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

如果是这种情况,为什么这不是默认设置?

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

【问题讨论】:

一些包运行 pre/post -install 脚​​本用于设置/配置目的。虽然将ignore-scripts 设置为true 可能 可以缓解恶意代码,但它可以而且经常会导致安装的软件包根本无法运行。 如果 'npm config set ignore-scripts true' 产生了@RobC 提到的上述问题,你对 npm install --ignore-scripts 有什么看法,是不是更好。 @AshiqueDesai - --ignore-scripts 选项产生与npm config set ignore-scripts true 相同的功能。所以关于你的具体问题; “好些了吗?”,答案是“否”,因为它们本质上是一样的。任何一种(或两种)方法都会导致 npm 不执行 package.json 中定义的任何脚本。 @RobC 不会运行npm install SOMEPACKAGES --ignore-scripts 阻止pre / post 脚本运行该特定安装,同时仍然允许npm package.json 脚本工作(即npm run start)?这与设置 npm config set ignore-scripts true 不同,它默认为所有未来的脚本执行此操作。 【参考方案1】:

我在这里同意@RobC。它还完全禁止在我的package.json 中运行自定义脚本,这显然是一个交易破坏者,因为您无法再定义和运行自定义脚本了。

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

所以视频中的建议最终并不是那么合理,我猜......

【讨论】:

也许现在是重新考虑如何运行自定义脚本的好时机,甚至是正确的时机 -1 以提倡便利而不是安全和负责任的工作 @jimmont 现在又是一个好时机,UAParser.js 的最新消息..【参考方案2】:

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

如果能在每个项目中选择忽略脚本以启用特定脚本来构建,那就太好了。

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

#!/bin/bash
set -e

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

附言yarn 没有explore

【讨论】:

【参考方案3】:

在我看来,演讲者建议将其作为一个问题。当我说捕捉时,这意味着他正试图吸引观众的注意力。他的重点是介绍他提供给你使用的东西。 我猜“npm config set ignore-scripts true”在他推荐的库或系统上工作得很好。这是我能看到的唯一解释。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于将忽略脚本设置为 true 时,npm 的行为有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

布尔结果显示为FALSE,应返回TRUE

你好声称和断言这个两个词有何区别?

为运行二进制文件的NPM脚本设置CWD

app与jvm 反向代理时config的设置(用于在web页面显示npm(就如tomcat)产生的页面)

yield函数 ,interrupt函数

将自定义变量从 npm 脚本设置为 javascript