npm:禁用软件包的安装后脚本


Answers:


267

仅禁用postinstall脚本是不可能的。但是,您可以使用以下命令禁用所有脚本:

$ npm install --ignore-scripts

正如注释中提到的delbertooo一样,这也会禁用依赖项的脚本。


2
谢谢。这正是我所需要的。在哪里可以找到这样的选择?“ npm帮助安装”,“ npm帮助配置”和“ npm帮助脚本”中未对此进行描述。
farwayer 2014年


69
警告!该选项--ignore-scripts将禁用所有脚本,甚至禁用您的依赖项。如果您的依赖项需要运行脚本来例如安装一些二进制文件,则它们可能会损坏/不完整。
delbertooo

7
那么,有没有一种技术可以安装node_modules(及其所有脚本),但仅忽略主软件包的脚本?
Derrick

3
不仅如此,而且--ignore-scripts或相关的config选项(我在全局范围内设置)也将意味着npm run start无提示地执行任何操作并报告成功。惊奇。
Ash Berlin-Taylor


4

要针对您自己的库执行此操作,我建议您执行以下简单操作:

#!/usr/bin/env bash

## this is your postinstall.sh script:

set -e;

if [ "$your_pkg_skip_postinstall" == "yes" ]; then
  echo "skipping your package's postinstall routine.";
  exit 0;
fi

然后使用以下命令进行npm安装:

your_pkg_skip_postinstall="yes" npm install

1
谢谢!如果您只是想禁用自己的脚本,而不是禁用所有依赖项中的所有脚本,则此方法非常有用。
布莱恩·内斯勒

@BrianNeisler yer非常欢迎您,总是很乐意帮助其他人。顺便说一句,我认为在大多数情况下,双括号[[]]可能比单括号更好,但不确定。
亚历山大·米尔斯

2

我想为我的项目禁用安装后脚本,但希望在运行时运行项目依赖项的所有脚本npm install。这就是我最终要做的。

  1. 创建一个脚本 ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. 在您的package.json文件中
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

现在只需设置环境变量SKIP_BUILD = 1即可阻止您的程序包构建,并且您的依赖项也将构建良好

SKIP_BUILD=1 npm install
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.