【问题标题】:How does npm behave differently with ignore-scripts set to true?将忽略脚本设置为 true 时,npm 的行为有何不同?
【发布时间】: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 不同,它默认为所有未来的脚本执行此操作。

标签: node.js npm npm-scripts


【解决方案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 不是正确的选择

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        • 2011-06-08
        相关资源
        最近更新 更多