Создать архивированный артефакт `npm publish`

#npm #tar

#npm #tar

Вопрос:

У меня есть пакет, который я создаю с использованием сервера CI. Я могу заархивировать весь свой каталог, используя что-то вроде tar -zcvf filename.tgz . но я не хочу включать файлы в мой .npmignore. Например, я не хочу включать /src , .gitignore junit.xml и несколько других каталогов.

Как я могу создать артефакт, который выглядит как опубликованная версия пакета?

Я думаю, одним из решений является использование --exclude .

tar --exclude="./src" --exclude=".gitignore" --exclude="junit.xml" -zcvf filename.tgz .

Или использовать --include :

tar -zcvf filename.tgz --include="./lib" --include=".babelrc.js" --include=".eslint.js" --include="package.json"

Однако мне не нравится ни одно из этих решений, потому что мне приходится вручную обновлять два места (.npmignore и эту команду) каждый раз, когда я добавляю файл / каталог в проект.

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

1. Как вы относитесь к использованию такого инструмента, как npmjs.com/package/tartifacts ?

Ответ №1:

Лучшим решением является -X .

.npmignore

 .git/*
__mocks__/*
.vscode/*
coverage/*
src/*
node_modules/*
junit.xml
  

Обратите внимание, что я включаю node_modules/ и .git . npm publish они уже не включены, но мы не хотим, чтобы они были в нашем архиве. Теперь мы можем исключить любой файл / каталог, который захотим.

tar -X .npmignore -cvf filename.tar .

Я заметил, что каталоги, которые мы исключаем, не включают содержимое каталога, но по-прежнему включают сам каталог, просто пустой. Как нам вообще не включать каталог? Я попробовал .git/ , и это не исключило никаких файлов.