It's not possible to disable only postinstall
script. However, you can disable all scripts using:
$ npm install --ignore-scripts
As delbertooo mentioned in the comments, this also disables the scripts of the dependencies.
题
Is it any npm option exist to disable postinstall
script while installing package? Or for rewriting any field from package.json
?
解决方案
It's not possible to disable only postinstall
script. However, you can disable all scripts using:
$ npm install --ignore-scripts
As delbertooo mentioned in the comments, this also disables the scripts of the dependencies.
其他提示
You can also enable the settings in npm configuration file.
npm config set ignore-scripts true
Note: This will disable scripts for all NPM packages.
I wanted to disable postinstall script for my project but wanted all scripts of my project's dependencies to run when I do npm install
.
This is what I ended up doing.
./scripts/skip.js
if (process.env.SKIP_BUILD) {
process.exit(0);
} else {
process.exit(1);
}
"scripts": {
...
"postinstall": "node ./scripts/skip.js || npm run build",
...
}
now just set the environment variable SKIP_BUILD=1 to prevent your package from building and your dependencies will build just fine
SKIP_BUILD=1 npm install
To do this for your own library, I recommend something simple like:
#!/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
then do your npm install with:
your_pkg_skip_postinstall="yes" npm install
If you're using NPM >= 8, you can also remove the postinstall
script temporarily:
npm pkg set scripts.postinstall="echo no-postinstall"
npm install
Or with NPM 7, like so:
npm set-script postinstall ""
npm install
Source: https://docs.npmjs.com/cli/v7/commands/npm-set-script/
Define .npmrc
and set ignore-scripts=true
.