Как проверить результат `npm publish` без фактической публикации в NPM? - PullRequest
0 голосов
/ 07 мая 2018

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

У меня вопрос: есть ли способ проверить результаты публикации 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

Я не думаю, что это сработает. Поскольку все, что мы включаем в архив публикации NPM, может не хватить, чтобы выполнить полный тест. Но, может быть, если мы скопируем все тестовые файлы (включая приборы и т. Д.), Когда мы сделаем copy_test_stuff, это может сработать?

Ответы [ 4 ]

0 голосов
/ 13 июня 2019

(ответ 2019)

Просто запустите

npm pack

В npm 6 и выше, это покажет, какие файлы будут загружены, и создастtar ball в текущем каталоге.

0 голосов
/ 08 мая 2018

У меня была точно такая же проблема, поэтому я создал пакет с именем package-preview . Что делает предварительный просмотр пакета:

  1. упаковывает ваш пакет (это то, что npm делает перед публикацией)
  2. устанавливает ваш пакет во временную папку
  3. связывает пакет с node_modules вашего проекта

Это позволяет вам в основном требовать пакет в качестве зависимости в ваших тестах. Так что в тестах "awesome-pkg", intead require('../lib') вы пишете require('awesome-pkg')

Я использую этот пакет во всех репозиториях pnpm в течение нескольких месяцев, и он работает очень хорошо. Я также опубликовал статью об этом пакете, которая объясняет все различные ошибки, которые он может поймать: Никогда не забывайте устанавливать зависимость

0 голосов
/ 15 января 2019

Я вижу слишком много сложных ответов, но согласно документации, вам просто нужно установить локальный пакет глобально (потому что он будет установлен в другой каталог)

Перейдите в корневой каталог вашего модуля и выполните

npm install . -g
0 голосов
/ 08 мая 2018

Я уточню свой комментарий, который я написал раньше, (спасибо Александру Миллсу).

Я verdaccio участник, поэтому я внимательно слежу за тем, кто реализует и как делать вердаччо. Я опишу пары или примеры (в основном e2e), которые я нашел и которые могут быть интересными или как правильный ответ.

создать реагирующее-приложение

Безусловно, самая популярная интеграция. Позвольте мне дать вам некоторый контекст, они используют lerna и имеют несколько пакетов, которые необходимо протестировать, прежде чем публиковать в основном реестре (или 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, а затем они запускают тесты против verdaccio. Когда все готово, они публикуются на вердаччо. Как последний шаг, позже в том же файле они выбирают пакеты со своим собственным приложением.

pnpm

Они создали проект под названием pnpm-registry-mock , который является абстракцией, которая позволяет им запускать 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, они готовят вердаччо и запускают тест как последний шаг. Я не могу вдаваться в подробности, так как видел это лишь поверхностно. Но я знаю, что он делает.

Mozilla Neutrino

Это работа в процессе , но также интересно упомянуть здесь.

+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 выполняется, и они публикуют все пакеты.

Babel.js

Я знаю, что Babel.js экспериментировал с тестированием дыма на Babel 6 и планирует интегрировать реестр с Babel 7 . Я цитата Генри Чжу в начале этого года говорит о babel-smoke-tests в той же ветке create-react-app.

Эксперимент называется babel-smoke-tests , а 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, который довольно легок и понятен в использовании, может быть реальным вариантом для вас . Некоторые крупные проекты (или начинают) использовать его, и они используют более или менее тот же подход. Так почему бы не попробовать? :)

https://www.verdaccio.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...