Прямой вызов глобально установленных модулей Node.js

Предположим, я хочу написать модуль для Node.js, который будет установлен глобально. Я не хочу писать никакой C++ (или что-то еще), а просто код Node.js.

В принципе, это очень легко. Просто напишите модуль и установите его с помощью npm install -g.

Теперь большинство глобально установленных модулей предоставляют возможность вызывать их напрямую, например. вы можете ввести express в командной строке и запустить глобально установленный загрузчик приложения Express.

Теперь мой вопрос: как мне этого добиться?

Если я просто установлю модуль глобально, это не сделает один из файлов доступным в виде исполняемого файла или поместит этот файл в каталог PATH.

Какие шаги мне нужно сделать, чтобы достичь этого?

Итак, мой вопрос в основном: какие шаги необходимо выполнить для создания глобально доступного исполняемого файла из «обычного» модуля Node.js?


person Golo Roden    schedule 25.01.2013    source источник
comment
Я считаю, что это ответ — github.com/visionmedia/express/blob /мастер/пакет.json#L49.   -  person Aleksei Zabrodskii    schedule 25.01.2013
comment
@elmigranto, можете ли вы уточнить свой ответ?   -  person Andrew Lam    schedule 26.11.2017


Ответы (1)


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

#!/usr/bin/env node

require("./../src/cli/cli.js").interpret(process.argv);

Согласно соглашению, этот файл следует поместить в каталог bin в корне вашего проекта. Затем вам просто нужно обновить файл package.json, чтобы сообщить ему, где найти исполняемый файл:

{
    "bin": {
        "jshint": "./bin/jshint"
    }
}

В этом случае исполняемый файл можно запустить из терминала командой jshint. Когда он запускается, он просто требует другой файл и вызывает в нем метод, передавая любые аргументы командной строки.

person James Allardice    schedule 25.01.2013
comment
Каковы последствия отсутствия "bin": {"jshint": "./bin/jshint"} в package.json? - person Andrew Lam; 26.11.2017
comment
bin указывает npm обрабатывать упомянутые файлы как двоичные файлы, которые будут связаны символическими ссылками в пользовательской PATH при установке с флагом --global или под node_modules/.bin в противном случае. В последнем случае при запуске npm run скриптов исполняемые файлы сначала будут искаться в этом каталоге. - person Aleksei Zabrodskii; 21.03.2018
comment
Вот документация для конфигурации "bin": docs.npmjs.com/files/package.json #bin - person Marco Roy; 12.01.2019