将忽略脚本设置为 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 的行为有何不同?的主要内容,如果未能解决你的问题,请参考以下文章