Как скопировать файл конфигурации JSON при установке моего пакета

#node.js #node-modules #npm-install

#node.js #узел-модули #npm-install

Вопрос:

Я создаю пользовательский пакет npm и хотел бы добавить файл конфигурации JSON.

Я хотел бы добавить этот файл в корневой путь приложения узла, когда a npm install mypackage будет выполнено

Я знаю, что это возможно, поскольку это то, что делает typescript, добавляя файл tsconfig.json в папку моего приложения, когда я делаю npm install typescript

Я предполагаю, что это конфигурация package.json, но я не знаю, какая именно.

Спасибо

Ответ №1:

Вы можете добиться этого с помощью postinstall скрипта.

 { "scripts" :
  ...
  "postinstall" : "scripts/postinstall.js"
  }
}
  

Вот объяснение событий жизненного цикла npm в документах:

Например, если ваш package.json содержит это:

 { "scripts" :
  { "install" : "scripts/install.js"
  , "postinstall" : "scripts/install.js"
  , "uninstall" : "scripts/uninstall.js"
  }
}
  

затем scripts/install.js будет вызываться на этапах установки и после установки жизненного цикла, а также scripts/uninstall.js будет вызван, когда пакет будет удален. Поскольку scripts/install.js выполняется для двух разных фаз, в этом случае было бы разумно посмотреть на переменную среды npm_lifecycle_event.

Комментарии:

1. Большое спасибо. Si «install», «postinstall» и «uninstall» являются зарезервированными ключевыми словами в массиве «scripts», которые используются npm, если они найдены. Я проверю это 😉

Ответ №2:

Я решил это с помощью genechk awnser :

Мне пришлось добавить скрипт «postinstall» в мой package.json, но мне также пришлось добавить команду «node» раньше, чтобы выполнить сценарий :

 "scripts" : [
  ...
  "postinstall" : "node scripts/postinstall.js"
  ]
  

Также мне пришлось добавить скрипт к доставляемым файлам из пакета :

   "files": [
    ...
    "scripts/**/*"
  ]
  

Finlay мой postinstall.js выглядит примерно так :

 const fs = require('fs');

// __dirname is "{ProjectFolder}/node_modules/mypackage/config"

const CONFIG_SRC = `${__dirname}/../config/`;
const CONFIG_DEST = `${__dirname}/../../../`;

const CONFIG_MYPACKAGE = 'mypackageconfig.json';

fs.copyFile(`${CONFIG_SRC}/${CONFIG_MYPACKAGE}`, `${CONFIG_DEST}/${CONFIG_MYPACKAGE}`, (err) => {
  if (err) throw err;
  console.log(`File ${CONFIG_MYPACKAGE} copied`);
});
  

Также, чтобы быть полностью корректным, мне пришлось использовать uninstall.js скрипт, следующий той же логике и удаляющий файл