Как проверить результат публикации npm, не публикуя его в NPM?
одна общая проблема у меня есть, это иногда мой .файл npmignore слишком агрессивен, и я игнорирую файлы, которые я действительно буду включать в npm tarball.
мой вопрос: есть ли способ проверить результаты публикации NPM без фактической публикации в NPM?
Я думаю что-то вроде этого. Предполагая, что у меня есть локальный пакет NPM с именем пакета "foo"
set -e;
local proj="bar";
local path_to_foo="."
mkdir -p "$HOME/.local.npm"
npm --tarball -o "$HOME/.local.npm" # made up command, but you get the idea
(
cd "$HOME/.temp_projects"
rm -rf "$proj"
mkdir "$proj"
cd "$proj"
npm init -f
npm install "$path_to_foo"
)
copy_test_stuff -o "$HOME/.temp_projects/bar"
cd "$HOME/.temp_projects/bar"
npm test
Я не думаю, что это будет работать. Потому что все, что мы включаем в НПМ опубликовать tarball, возможно, недостаточно, чтобы сделать полный тест. Но, возможно, если мы скопируем все тестовые файлы (включая светильники и т. д.), Когда мы это сделаем copy_test_stuff
, это может сработать?
3 ответов
Я создал решение этой проблемы. Вот проект: https://github.com/ORESoftware/r2g
README делает хорошую работу по его объяснению, но вкратце он по существу использует npm pack
чтобы создать tarball, а затем в другом локальном проекте NPM вы используете npm install --production /path/to/tarball.tgz
для использования исходного проекта NPM, который требуется протестировать.
Я также включил идею @Zoltan Kochan из его ответа ниже, который заключается в npm pack
проект X, а затем установить, что tarball как зависимость проекта X (связывание проекта с самим собой). Затем можно повторно использовать набор тестов для тестирования самого проекта в его опубликованной форме.
преимущества, по крайней мере, три раза - во-первых, вы не позволяете какой-то своенравной настройке .npmignore сделайте так, чтобы в опубликованном пакете отсутствовали нужные вам файлы. А во-вторых, вы заставляете себя тестировать его как зависимость от другого проекта, а не просто тестировать проект непосредственно в рамках того же проекта. В-третьих, вы используете --production
флаг с npm install
чтобы узнать, есть ли у вас все зависимости, необходимые для запуска его в производстве.
когда ваша библиотека тестируется на Jenkins / Travis / Appveyor и т. д., Она обычно находится в формате контроля версий, а не в опубликованном формате NPM. В основном все сводится к этому .npmignore, и что .npmignore опускает из вашего проекта. Кроме того, некоторые люди используют "files"
собственность в пакет.json, и использование "файлов" означает, что вы не можете включить файлы, необходимые для издательский.
я уточню свой комментарий, который я опубликовал earler, (спасибо Александру Миллсу).
я verdaccio
автор, поэтому, я внимательно слежу за тем, кто реализует и как вердаччо. Я опишу пары или примеры (в основном e2e), которые я нашел и могут быть интересны или как действительный ответ.
create-react-app
безусловно, самая популярная интеграция. Позвольте мне дать вам некоторый контекст, они используют lerna
и имеют несколько пакетов, которые необходимо проверить перед публикацией в основном реестре aka (npmjs
). Я цитата здесь дан Абрамов объясняя причины использования реестра custon.
на скрипт не требует пояснений но позвольте мне подчеркнуть некоторые детали.
+nohup npx verdaccio@2.7.2 &>$tmp_registry_log &
+# Wait for `verdaccio` to boot
+grep -q 'http address' <(tail -f $tmp_registry_log)
+
+# Set registry to local registry
+npm set registry http://localhost:4873
+yarn config set registry http://localhost:4873
+
+# Login so we can publish packages
+npx npm-cli-login@0.0.10 -u user -p password -e user@example.com -r http://localhost:4873 --quotes
# Test local start command
yarn start --smoke-test
+./tasks/release.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
Как видите, они бегут verdaccio
и вместо пользовательского файла конфигурации они решили использовать npm-cli-login
и затем они проводят тесты против вердаччо. Когда все будет готово, они опубликуют вердаччо. Как последний шаг, позже в том же файле они получают пакеты со своим собственным приложением.
pnpm
они создали проект под названием pnpm-реестр-макет что является абстракцией, которая позволяет им запускать verdaccio перед запуском тестов.
"pretest:e2e": "rimraf ../.tmp/ && rimraf node_modules/.bin/pnpm && pnpm-registry-mock prepare",
"test:e2e": "preview --skip-prepublishOnly && npm-run-all -p -r pnpm-registry-mock test:tap",
"test": "npm run lint && npm run tsc && npm run test:e2e",
в основном, используя сценарии npm, они готовят verdaccio и запускают тест как последний шаг. Я не могу вдаваться в подробности, так как видел это очень поверхностно. Но я знаю, что он делает.
Mozilla Нейтрино!--21-->
это работа продолжается, но это также интересно упомянуть здесь.
+if [ "$PROJECT" == "all" ]; then
+ yarn link:all;
+ yarn validate:eslintrc;
+ yarn lint;
+ yarn build;
+ yarn test;
+else
+ yarn verdaccio --config verdaccio.yml & sleep 10;
+ yarn config set registry "http://localhost:4873";
+ npm config set registry "http://localhost:4873";
+ .scripts/npm-adduser.js;
+ yarn lerna publish \
+ --force-publish=* \
+ --skip-git \
+ --skip-npm \
+ --registry http://localhost:4873/ \
+ --yes \
+ --repo-version $(node_modules/.bin/semver -i patch $(npm view neutrino version));
+ yarn lerna exec npm publish --registry http://localhost:4873/;
+ PROJECT="$PROJECT" TEST_RUNNER="$TEST_RUNNER" LINTER="$LINTER" yarn test:create-project;
+fi
опять же, тот же подход, проект строится, а потом verdaccio
выполняется и они публикуют все пакеты.
Бабель.js
я знаю, что Бабеля.js экспериментирует с дымом-тестированием для Babel 6 и имеет планирует интегрировать реестр с Babel 7. Я!--53-->цитата Генри Чжу в начале этого года говорят о babel-smoke-tests
в том же потоке create-react-app
.
эксперимент называется Вавилон-дым-тесты и babel-smoke-tests/scripts/test.sh
ключевой файл для вас.
здесь я вижу ту же картину, что и другие проекты. Они запускают verdaccio
а потом они делают свое дело.
START=$(cd scripts; pwd)/section-start.sh
END=$(cd scripts; pwd)/section-end.sh
$START 'Setting up local npm registry' setup.npm.registry
node_modules/.bin/verdaccio -l localhost:4873 -c verdaccio.yml &
export NPM_CONFIG_REGISTRY=http://localhost:4873/
NPM_LOGIN=$(pwd)/scripts/npm-login.sh
$NPM_LOGIN
$END 'Done setting up local npm registry' setup.npm.registry
scripts/bootstrap.sh
export THEM=$(cd them; pwd)
if [[ $SPECIFIC_TEST ]]; then
scripts/tests/$SPECIFIC_TEST.sh
else
scripts/tests/jquery.sh
scripts/tests/react.sh
fi
завернуть
прежде всего, я надеюсь, что мое небольшое исследование даст вам новые идеи, как решить вашу проблему. Я думаю npm pack
решить некоторые вопросы, но издевательство над реестром с помощью verdaccio
который довольно легкий и простой в использовании может быть реальным вариантом для вас. Некоторые крупные проекты используют (или начинают использовать) его, и они следуют более или менее тому же подходу. Так почему бы не попробовать? :)
у меня была точно такая же проблема, поэтому я создал пакет под названием . Что делает пакет-предварительный просмотр:
- пакует ваш пакет (это то, что npm делает перед публикацией)
- устанавливает пакет во временном расположении
- связывает пакет с node_modules вашего проекта
Это позволяет вам в основном требовать пакет в качестве зависимости в ваших тестах. Так что в тестах "awesome-pkg", intead require('../lib')
вы пиши require('awesome-pkg')
Я использую этот пакет во всех репозиториях pnpm в течение нескольких месяцев, и он работает очень хорошо. Я также опубликовал статью об этом пакете, которая объясняет все различные ошибки, которые он может поймать:никогда не забывайте устанавливать зависимость