npm, избегайте публикации src dir без использования .npmignore - PullRequest
0 голосов
/ 07 марта 2019

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

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

Ответы [ 2 ]

1 голос
/ 07 марта 2019

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, с помощью сценария prepublish не существует другой папки / каталога src.

Кроссплатформенность:

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

package.json

...
"scripts": {
  "prepublishOnly": "shx mv src/ ../",
  "postpublish": "shx mv ../src .",
  ...
},
...
0 голосов
/ 11 марта 2019

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

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

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/ 
...