Пакет установки npm как главный проект, а не как зависимость

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

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

Проблемы:

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

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

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


person Lukáš Řádek    schedule 20.01.2020    source источник


Ответы (2)


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

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

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

person jeeves    schedule 10.02.2020

Опубликовать как исполняемый CLI

Опубликуйте пакет с включенным параметром bin в package.json. Вам понадобится опция bin, чтобы указать на скрипт с shebang для узла, который имеет привилегии exec и запускает проект.

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

Установите пакет локально и запустите с скриптом npm

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

Из документов по сценариям NPM:

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

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

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

person Jon Church    schedule 13.02.2020