npm, избегайте публикации каталога src без использования .npmignore

#npm #npm-publish

#npm #npm-опубликовать

Вопрос:

npm publish Команда создает архив (с src каталогом) и публикует его в реестре.

есть ли способ исключить src каталог, избегая использования .npmignore ?

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

1. Можете ли вы указать контекст, почему вам нужно избегать использования .npmignore?

Ответ №1:

npm не предоставляет никакой другой встроенной функции для достижения этой цели, поэтому требуется пользовательское решение.

Если вы действительно не хотите использовать .npmignore для сохранения src каталога вне вашего опубликованного пакета, тогда рассмотрите возможность использования хуков pre и post в ваших сценариях npm вместо этого.

Соответствующие крючки:

  • prepublishOnly : Запуск ДО подготовки и упаковки пакета, ТОЛЬКО на npm publish

  • postpublish : Запуск ПОСЛЕ публикации пакета.

Для платформ * nix

  1. Добавьте prepublishOnly скрипт в scripts раздел вашего package.json, который перемещает src каталог в другое место за пределами каталога вашего проекта перед публикацией.

  2. Кроме того, добавьте postpublish скрипт, который перемещает src каталог обратно в каталог проекта после завершения публикации.

  3. Запустите npm publish (как обычно), чтобы опубликовать свой пакет.

Например:

package.json

 ...
"scripts": {
  "prepublishOnly": "mv src/ ../",
  "postpublish": "mv ../src .",
  ...
},
...
  

Примечание: Вам нужно убедиться, что в пути, который вы выбираете для временного перемещения в src каталог с помощью вашего src скрипта, не существует другой prepublish папки / каталога.

Кросс-платформенный:

Для кроссплатформенного решения рассмотрите возможность использования shx. Этот пакет включает переносимую mv команду. В этом случае настройте свои prepublish и postpublish скрипты примерно следующим образом:

package.json

 ...
"scripts": {
  "prepublishOnly": "shx mv src/ ../",
  "postpublish": "shx mv ../src .",
  ...
},
...
  

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

1. Как насчет свойства package.json files ?

Ответ №2:

Вы можете использовать files свойство в вашем package.json, чтобы явно включить файлы, которые вы хотите опубликовать.

 {
  "files": [
    "dist",
    "index.js"
  ]
}
  

Ответ №3:

Как отвечает @RobC, нет другого способа, кроме пользовательского решения, избежать использования .npmignore.

Поскольку я использую команду publish в конвейере Jenkins, решением является создание временного .npmignore на этапе публикации непосредственно в файле Jenkins:

 echo "src/" >> .npmignore
echo "*.js" >> .npmignore
echo "*.json" >> .npmignore
echo "Jenkinsfile" >> .npmignore
curl --insecure -u ${USERPASS} 'https://my-repo/api/npm/auth' >> /home/jenkins/.npmrc
npm publish --registry https:// my-repo/api/npm/npm-local/