سؤال

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.

  1. Create a script ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. In your package.json file
 "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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top