npm: отключить сценарий postinstall для пакета

149

Существует ли какая-либо опция npm для отключения сценария postinstall при установке пакета? Или для перезаписи любого поля из package.json?

дальнобойщик
источник
Вопрос очень ясный, но ... неужели это ваша конечная цель? github.com/zloirock/core-js#postinstall-message ;-)
conny

Ответы:

278

Невозможно отключить только postinstallскрипты. Однако вы можете отключить все скрипты, используя:

$ npm install --ignore-scripts

Как упоминал delbertooo в комментариях, это также отключает скрипты зависимостей.

Герго Эрдози
источник
2
Спасибо. Это именно то, что мне нужно. Где мне найти такие варианты? Это не описано в «npm help install», «npm help config» и «npm help scripts».
Farwayer
3
Я проверил код напрямую: github.com/npm/npm/blob/master/lib/build.js#L179
Герго Эрдози,
74
Осторожно! Эта опция --ignore-scriptsотключает ВСЕ скрипты - даже из ваших зависимостей. Если вашим зависимостям нужно запускать скрипты, например, для установки некоторых двоичных файлов, они могут сломаться / быть неполными.
delbertooo
7
Итак, есть ли способ установить node_modules (и все их сценарии), но игнорировать только сценарии основного пакета?
Derrick
4
Не только это, но --ignore-scriptsили связанный с ним параметр конфигурации (который я установил глобально) также будет означать, что npm run startничего не будет делать и сообщать об успехе. Поразите.
Эш Берлин-Тейлор
22

Вы также можете включить настройки в файле конфигурации npm.

npm config set ignore-scripts true

Примечание. Это отключит сценарии для всех пакетов NPM.

РобоМекс
источник
2
Это должен быть ответ. См. Сообщение в блоге npm: blog.npmjs.org/post/141702881055/…
Питер Вентер
2
Обратите внимание, что он также отключает возможность выполнения вручную npm run …- он просто ничего не будет делать без какого-либо предупреждения.
CodeManX
7

Я хотел отключить сценарий postinstall для своего проекта, но хотел, чтобы все сценарии зависимостей моего проекта запускались, когда я это делаю 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
Атул
источник
6

Чтобы сделать это для вашей собственной библиотеки, я рекомендую что-нибудь простое, например:

#!/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
Благодарность! Это отлично работает, если вы просто пытаетесь отключить свой собственный сценарий, но не ВСЕ сценарии во всех зависимостях.
Брайан Нейслер
1
@BrianNeisler, вы всегда рады помочь другим людям. Кстати, я думаю, что двойные скобки [[]] могут быть лучше одинарных скобок для большинства случаев использования, но не уверен.
Александр Миллс