npm: відключення сценарію після встановлення для пакета


142

Чи існує який-небудь варіант npm для відключення сценарію після встановлення під час встановлення пакета? Або для переписування будь-якого поля з пакета.json?


Питання дуже чітке, але ... чи випадково це ваша кінцева мета? github.com/zloirock/core-js#postinstall-message ;-)
conny

Відповіді:


267

Відключити лише postinstallсценарії неможливо . Однак ви можете відключити всі сценарії, використовуючи:

$ npm install --ignore-scripts

Як згадувалося в коментарях delbertooo, це також вимикає сценарії залежностей.


2
Дякую. Це саме те, що мені потрібно. Де я можу знайти такі варіанти? Це не описано в "npm help install", "npm help config" та "npm help script".
далекобійник

3
Я перевірив код безпосередньо: github.com/npm/npm/blob/master/lib/build.js#L179
Герго Ердосі

69
Обережно! Параметр --ignore-scriptsвимикає ВСІ сценарії - навіть від ваших залежностей. Якщо вашим залежностям потрібно запустити сценарії, наприклад, встановити деякі двійкові файли, вони можуть порушитися / бути неповними.
delbertooo

7
То чи існує техніка встановлення node_modules (та всіх їхніх сценаріїв), але ігнорувати лише сценарії основного пакета?
Деррік

3
Не тільки це, але --ignore-scriptsі пов'язаний з ним параметр config (який я встановив у всьому світі) також означатиме, що npm run startмовчки нічого не робитимуть і повідомлятимуть про успіх. Дивуйте.
Еш Берлін-Тейлор

21

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

npm config set ignore-scripts true

Примітка. Це вимкне сценарії для всіх пакетів NPM.


2
Це має бути відповіддю. Дивіться публікацію в блозі npm: blog.npmjs.org/post/141702881055/…
Пітер Вентер

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.