Директно извикване на глобално инсталирани модули 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 /master/package.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