【问题标题】:How to disallow npm packages from executing post install scripts, without disabling scripts defined in package.json?如何禁止 npm 包执行安装后脚本,而不禁用 package.json 中定义的脚本?
【发布时间】:2021-02-10 20:40:25
【问题描述】:

看到nice YouTube video 提到使用 NPM 包管理器的安全问题,我认为禁止包在安装时执行代码是有意义的。此 NPM 配置将执行此操作:

npm config set ignore-scripts true

但是package.json 中定义的脚本不会运行。包括npm start。这很烦人。

有没有一种方法可以阻止包执行代码(如果我没记错的话,我认为这是安装后脚本)并且仍然允许在package.json 中定义的脚本运行?

明确一点:我确实想执行我自己的脚本。我想在npm install 期间执行第 3 方脚本。

【问题讨论】:

  • 噗,你为什么要执行自己的脚本?太荒谬了... ????

标签: npm


【解决方案1】:

npm-install 文档中指出:

--ignore-scripts 参数将导致 npm 不执行 package.json 中定义的任何脚本。

因此,本质上,当您安装软件包时,您需要附加 --ignore-scripts 参数以防止第三方软件包执行脚本,例如 postinstall

例如:

npm install <pkg_name> --ignore-scripts

注意事项:

  • 第三方包安装完成后,您仍然可以运行在 package.json 中定义的自己的 npm 脚本。
  • 我认为禁止包在安装时执行代码是有意义的。

    这取决于,当忽略使用 --ignore-scripts 参数的脚本时,您不能始终保证您安装的包将完全正​​常运行 - 例如,这取决于在 postinstall 脚​​本中执行的任务。

  • 您无法使用 --ignore-scripts 参数具体说明要忽略哪些脚本。

【讨论】:

  • 这似乎是 NPM 中的空白功能。我肯定希望能够将允许运行脚本的包列入白名单吗?例如,node-sass。
  • 是的,你可能是对的,但是你想要的功能在 npm 中不存在。那么,这是否没有回答您的问题:“我确实想执行我自己的脚本。我不想在 npm 安装期间执行第 3 方脚本”
【解决方案2】:

似乎没有办法 ~~whitelist~~ 选择仅在选定的包中允许脚本。

但是,Yarn2 现在似乎支持它了:https://dev.to/arcanis/introducing-yarn-2-4eh1#perpackage-build-configuration

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 2020-01-24
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2019-11-12
    • 2011-05-15
    • 2013-01-18
    相关资源
    最近更新 更多