У меня есть проект, который включает задачу gulp для сборки и упаковки исходников и выпуска в каталог с именем dist
. Моя цель - опубликовать его как пакет npm, но только мою папку dist. В документации npm сказано, что я могу использовать files
тег для указания файлов для экспорта. Оно работает. Но в документации также говорится, что:
Если вы назовете папку в массиве, она также будет включать файлы внутри этой папки
Результатом является пакет npm, который выглядит как node_modules:
Но я бы хотел видеть все свои файлы в корне пакета (без этой dist
папки). Мой index.js
файл находится внутри dist
папки, но должен находиться в корневом каталоге. Я пытался установить тег files
как, /dist/**/*
но это не сработало.
Как я могу этого добиться?
источник
npm pack
указано в ответах ниже, при использовании package.jsonfiles
иmain
fields.npmignore
разработчик получает все необходимое для создания пакета из определенного устанавливаемого каталога.У меня проблема, похожая на исходный плакат (@robsonrosa). В моем случае я использую typecript, который компилируется в
dist
каталог. Хотя я мог бы скомпилировать машинописный текст в корневой каталог, я думаю, что лучшим решением будет создать отдельныйpackage.json
файл в каталоге dist.Это похоже на предложение @scvnc о копировании,
package.json
но с поворотом:В рамках процесса упаковки вы должны создать
package.json
для пакета файл, который основан на основномpackage.json
файле в корневом каталоге, но отличается от него.Обоснование:
package.json
файл - это файл разработки. Он может содержать сценарии или зависимости разработки, которые бесполезны для пользователя пакета, но могут представлять для вас проблемы с безопасностью. Ваша процедура упаковки может включать код, удаляющий эту информацию из производстваpackage.json
.--- РЕДАКТИРОВАТЬ ---
Меня попросили решение в комментариях. Вот код, который я использую. Это следует рассматривать как пример, он не является общим и относится только к моим проектам.
Моя установка:
Я хочу упаковать только
dist
каталог, и этот каталог должен быть корневым каталогом в пакете.Файл
SetupPackage.ts
в моемsrc
каталоге будет скомпилированSetupPackage.js
вdist
каталог с помощью машинописного текста:Этот файл:
package.json
но удаляет скрипты и зависимости разработчика, которые не нужны в пакете. Он также исправляет основную точку входа в пакет.package.json
в файл с именемversion.txt
..npmignore
пакет из корня.Содержимое .npmignore:
Т.е. модульные тесты (файлы спецификаций) и файлы сопоставления машинописного текста игнорируются, а также
SetupPackage.js
файл иversion.txt
файл, который они создают. Это оставляет чистый пакет.Наконец, в основном
package.json
файле есть следующие сценарии для использования системой сборки (предполагается, чтоsh
он используется в качестве оболочки).Для сборки пакета система сборки клонирует репозиторий, выполняет,
npm install
а затем запускает,npm run buildpackage
что в свою очередь:dist
каталог, обеспечивая чистую компиляцию.SetupPackage.js
файл, который готовитсяdist
к упаковке.dist
каталог и собирает там пакет.Я использую этот
version.txt
файл как простой способ получить версию в package.json и пометить свое репо. Есть бесчисленное множество других способов сделать это, или вы можете захотеть автоматически увеличить версию. Удалите это изSetupPackage.ts
и,.npmignore
если это вам не нужно.источник
Если в вашем проекте есть git, вы можете использовать небольшой хак. Добавьте следующие скрипты в package.json
теперь при запуске
publish
команды npm includeprepublishOnly
. Он создает файлы и сохраняет их вlib
папку (сценарий сборки зависит от вашего проекта). Следующая команда копирует файлы в корневую папку и удаляетlib
. После публикацииpostpublish
скрипт возвращает проект в предыдущее состояние.источник
Я настоятельно рекомендую вам использовать
.npmignore
вместо перемещения или копирования вещей, особенно если вы используете CI для развертываний, и просто добавлять туда файлы, которые вы не хотите публиковать.https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package
Пример:
Обновить:
Если вы хотите разделить свой код на разные пакеты npm, используя одно и то же репо, я недавно столкнулся с этим проектом: Lerna и выглядит действительно хорошо.
Может тебе стоит взглянуть
источник
require('mypackage/foo')
require('mypackage/dist/foo')
У меня это отлично работает.
cd TMPDIR;
npm pack
/path/to/package.jsonTarball будет создан внутри каталога TMPDIR.
источник
npm pack
плюсfiles
поле package.json (или.npmignore
) прекрасно работает.Вам нужно опубликовать
dist
папкуЕстественный способ добиться этого, согласно подходу npm, - опубликовать папку, которая должна быть корневой. Это можно сделать несколькими способами, в зависимости от конечной среды, с которой вы хотите работать:
npm publish dist
.npm install relative/path/to/dist
node_modules
в другом проекте на случай, если вы хотите, чтобы изменения в исходном пакете мгновенно отражались в другом проекте. В вашем случае вы сначалаcd dist
запускаете,npm link
а затем переходите к другому проекту и запускаетеnpm link robsonrosa-ui-alert
.Предварительное условие : в любом случае, описанном выше, перед публикацией / установкой / ссылкой вы должны поместить в свою
dist
папку как минимум соответствующийpackage.json
файл. В вашем случае имя пакета должно быть определено в файле package.json как"name": "robsonrosa-ui-alert"
. Как правило, вам понадобятся также некоторые другие файлы, такие как README.md или LICENSE.Пример автоматизации
Вы можете автоматизировать процесс публикации, используя
prepare
скрипт в сочетании соbuild
скриптом. Кроме того, вы можете защитить свой пакет от случайной публикации корневой папки пакета с помощью"private": true
поля, помещенного в package.json, расположенное в корневом каталоге репозитория вашего пакета. Вот пример:"private": true, "scripts": { "build": "rm -rf dist && gulp build && cat ./package.json | grep -v '\"private\":' > dist/package.json", "prepare": "npm run build" },
Таким образом, вы не будете публиковать корневую папку и автоматически создавать пакет и копировать package.json в
dist
папку в процессе публикации.источник
Вариант 1. Перейдите в папку и выполните команду npm publish. команда
вариант 2: запустить npm publish / path / directory
источник
Вот еще один подход, который я считаю наиболее чистым. Все это основано на конфигурации без необходимости перемещать файлы или указывать пути в сценариях сборки и упаковки:
package.json
Укажите основной файл.Некоторые дополнительные параметры машинописного текста:
rootDir
. В этом каталоге будет весь исходный код и должен бытьindex
файл (или какой-либо другой файл, который вы можете использовать в качестве основного вpackage.json
).outDir
. Здесь ваша команда tsc будет создаватьtsconfig.json
источник
Просто создайте
.npmignore
файл и добавьте в него следующее:источник