npm установить пакет как главный проект, а не как зависимость - PullRequest
3 голосов
/ 21 января 2020

Я использую узел npm + для некоторых простых сценариев. Минимальный пример: у меня есть каталог проекта узла (в котором я запускал npm init), содержащий каталоги script.js, package(-lock)?.json и node_modules с зависимостями. И этот скрипт я запускаю из cmdline node "C:/path-to-project/script.js".

Я хочу поделиться этим скриптом между двумя компьютерами. Я решил использовать npm и опубликовать sh своих сценариев в реестре.

Проблемы:

MAIN) При установке пакета на другой машине он помещается в node_modules с зависимостями и поэтому не может использоваться из каталога главного проекта, как на исходном компьютере. Загрузка пакета с npm-pack приводит к желаемой структуре каталогов, но больше нет возможности npm-update главного проекта (= script. js).

SECONDARY) Я использую локальную зависимость, который добавляется как ссылка на node_modules. Я хотел бы сохранить его как локальную ссылку на исходном компьютере, но установить его из реестра на втором. Зависимость также публикуется, но при установке на втором p c, npm завершается с ошибкой Could not install from "node_modules\utils" as it does not contain a package.json file. Пакет ограничен, поэтому нет конфликта имен, и что-то подобное сообщается здесь как ошибка https://github.com/npm/npm/issues/18266 .

Итак, как правильно достичь моей цели? Главным образом первая часть об установке его как главного проекта, а не как зависимости, сохраняя возможность обновления до более новой версии.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Publi sh как исполняемый CLI

Publi sh пакет с включенной опцией bin. json. Вам понадобится опция bin, чтобы указать на скрипт со шебангом для узла, который имеет привилегии exe c и запускает проект.

Это позволит вам запустить пакет как исполняемый файл.

Установите пакет локально и запустите w / npm script

Затем вы можете установить пакет в другой проект как локальную зависимость с npm i и создать сценарий npm для запуска Пакет как скрипт. Скрипты NPM выглядят как в $PATH, так и в node_modules/.bin локального проекта, когда вы даете ему имя команды для запуска. Таким образом, из скрипта npm он найдет имя вашего пакета (или имя команды, которое вы использовали при настройке записи bin)

Из документов NPM scripts :

В дополнение к уже существующему PATH оболочки, npm run добавляет node_modules / .bin к PATH, предоставленной сценариям. Любые двоичные файлы, предоставляемые локально установленными зависимостями, могут использоваться без префикса node_modules / .bin.

Это означает, что вам не нужно устанавливать пакет глобально, и вы можете сохранить его как локальную зависимость проект, где вы можете обновить его с npm update. (Если он используется только во время разработки, установите его как dev-зависимость .)

Что касается вашей второй проблемы, я не уверен, как ее воспроизвести, и я ' Я предлагаю открыть второй вопрос, чтобы задать его конкретно.

0 голосов
/ 10 февраля 2020

Возможным решением для этого является создание инструмента Cli с питанием от узла.

Вот учебник о том, как построить инструмент cli в узле. В конечном итоге вы установите инструмент по всему миру, и он будет доступен в виде двоичного файла по вашему клиенту.

https://www.twilio.com/blog/how-to-build-a-cli-with-node-js

...