【发布时间】:2014-06-23 16:38:50
【问题描述】:
安装包时是否存在任何 npm 选项来禁用安装后脚本?或者重写 package.json 中的任何字段?
【问题讨论】:
-
这个问题很清楚,但是......有可能这是你的最终目标吗? github.com/zloirock/core-js#postinstall-message ;-)
安装包时是否存在任何 npm 选项来禁用安装后脚本?或者重写 package.json 中的任何字段?
【问题讨论】:
不能只禁用postinstall 脚本。但是,您可以使用以下命令禁用所有脚本:
$ npm install --ignore-scripts
正如在 cmets 中提到的 delbertooo,这也会禁用依赖项的脚本。
【讨论】:
--ignore-scripts 禁用所有脚本 - 甚至是您的依赖项。如果您的依赖项需要运行脚本,例如安装一些它们可能会破坏/不完整的二进制文件。
--ignore-scripts,或相关的配置选项(我在全局范围内设置)也意味着npm run start 将默默地不做任何事情并报告成功。惊奇。
要为您自己的库执行此操作,我建议使用以下简单方法:
#!/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
【讨论】:
您也可以在 npm 配置文件中启用设置。
npm config set ignore-scripts true
注意:这将禁用所有 NPM 包的脚本。
【讨论】:
npm run … 的功能 - 它只会什么都不做,不会发出任何警告。
我想为我的项目禁用安装后脚本,但希望我的项目依赖项的所有脚本在我执行npm install 时运行。
这就是我最终要做的。
./scripts/skip.js if (process.env.SKIP_BUILD) {
process.exit(0);
} else {
process.exit(1);
}
"scripts": {
...
"postinstall": "node ./scripts/skip.js || npm run build",
...
}
现在只需设置环境变量 SKIP_BUILD=1 以防止您的包构建并且您的依赖项将正常构建
SKIP_BUILD=1 npm install
【讨论】:
如果你使用 NPM>=7,你也可以暂时移除 postinstall 脚本:
npm set-script postinstall ""
npm install
【讨论】: