Как правильно создать глобальный модуль для Node.js

Многие разработчики публикуют свои пакеты на NPM каждый день. Большинство из них очень полезны, они предлагают использовать модуль с кодом и командной строкой, однако не все они предоставляют свои модули глобально (не потому, что вы не выполнили команду установки с -g флаг, но модуль не настроен для глобального использования). Если они предлагают полезность (script.js), что делает какой-то особый трюк, чтобы выполнить его из командной строки, вам нужно будет указать путь к сценарию и вызвать его с помощью узла:

node ../path/to/my-awesome/tool/script.js --arguments somevalue

Немного больно, если вы много с этим работаете. Вместо этого вы бы хотели, так как разработчик приложения обладает определенными правами, оригинальностью и предоставляет глобальные команды для вашего приложения в виде известных сред и наборов инструментов, таких как Cordova или TypeScript, имя инструмента в качестве команды и остальная часть команды:

cordova do-something
REM or other tools
tsc do-other-thing
nodemon do-other-thing

Что было бы лучше, чтобы сделать то же самое для вашего собственного модуля:

mymodule do-something

В этой статье вы узнаете, как легко создать подходящий модуль для глобальной установки.

1. Создать нормальный модуль

В качестве первого шага перейдите к созданию пустого модуля. Название нашего модуля будет custom-toolkit (измените его, как вы хотите), расположенный на рабочем столе внутри custom-toolkit папка, внутри custom-toolkit папка создайте новую папку, которая будет содержать код вашего модуля с именем libнаконец-то создать внутри lib папка одного файла (index.js), который имеет следующее содержание:

// ./lib/index.js
/**
* Displays a string in the console
*
* @param {string_to_say} String string to show in the console
*/
var say = function(string_to_say) {
return console.log(string_to_say);
};
// Allows us to call this function from outside of the library file.
// Without this, the function would be private to this file.
exports.say = say;

Основной скрипт нашего модуля будет предоставлять метод say, который показывает некоторый текст в консоли. Вы можете создать модуль (создать package.json) с помощью npm init:

npm init Node.js

Или вручную создавая package.json со следующим содержимым (измените нужные поля кроме основного):

{
"name": "custom-toolkit",
"version": "1.0.0",
"description": "An awesome custom global module",
"main": "./lib/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "ourcodeworld",
"license": "MIT"
}

Этого должно быть достаточно для нашего примера модуля, просто не так ли? Структура модуля будет такой:

Глобальная модульная структура 1

2. Создайте глобальные файлы модулей

Создать новую папку с именем bin внутри корневого каталога вашего модуля с новым файлом js внутри (demo-global.js) со следующим содержимым внутри:

#!/usr/bin/env node
var myLibrary = require('../lib/index.js');
// Displays the text in the console
myLibrary.say('Jack, get back, come on before we crack Lose your blues, everybody cut footloose');

Важный

Обратите внимание, что первая строка (#!/usr/bin/env node) позволит npm правильно сгенерировать исполняемый файл для этого модуля. Если кто-то работает в Windows, он игнорирует строку shebang #!/usr/bin/env узел и выполнит его в соответствии с файловой ассоциацией .js.

Если вы упаковываете пакет для npm, используйте свойство bin в package.json (это то, что мы собираемся сделать на шаге 3). Затем в Windows Npm установит .cmd Обертка вдоль вашего скрипта, чтобы пользователи могли выполнять его из командной строки

Этот скрипт demo-global.js будет тот, который мы представим во всем мире с пользовательским именем на нашем package.json,

3. Выставьте свой модуль для глобальной установки

В этом случае мы хотим, чтобы наш глобальный модуль имел имя dosomethingawesome, npm делает это довольно просто, чтобы зарегистрировать наш глобальный модуль, нам нужно указать свойство bin для нашего package.json, Обратите внимание, что вы можете выполнять столько команд, сколько хотите, у многих пакетов есть один или несколько исполняемых файлов, которые они хотели бы установить в PATH.

Изменить package.json и зарегистрировать dosomethingawesome инструкция, которая выполняет demo-global.js сценарий:

{
...
"bin": {
"dosomethingawesome": "./bin/demo-global.js"
},
..-
}

Этого было бы достаточно, чтобы зарегистрировать модуль глобально, когда кто-то устанавливает ваш модуль с npm install -g yourmodule, Обратите внимание, что если ваш пакет в первую очередь является приложением командной строки, которое должно быть установлено глобально, то вы можете добавить preferGlobal свойство true, чтобы обеспечить предупреждение, если оно установлено локально. На самом деле это не мешает пользователям устанавливать его локально, но помогает избежать путаницы, если она не работает должным образом:

{
...
"preferGlobal": true,
..-
}

Тогда ваш package.json наконец должен выглядеть так:

{
"name": "custom-toolkit",
"version": "1.0.0",
"description": "An awesome custom global module",
"main": "./lib/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"bin": {
"dosomethingawesome": "./bin/demo-global.js"
},
"preferGlobal": true,
"author": "ourcodeworld",
"license": "MIT"
}

И ваш модуль готов к установке.

4. Установите свой модуль

Последний шаг зависит от вас, вам нужно всего лишь установить модуль так, как вы хотите. Вы можете установить его из локального источника, опубликовать в Github, затем в NPM и т. Д. В этом случае мы собираемся установить модуль глобально из папки на рабочем столе, поэтому наша команда, которая теоретически npm install -g custom-toolkit будет выглядеть так:

npm install -g C:\Users\sdkca\Desktop\custom-toolkit

Не забудьте добавить -g Отметьте, чтобы установить пакет глобально, и вы готовы к работе. Теперь ваш модуль (выставленный dosomethingawesome Инструкция) доступна везде:

Пример установки общего модуля NPM

Чтобы удалить его (даже если он установлен из локального источника), выполните npm uninstall -g custom-toolkit,

Заключительные советы

Учебное пособие было объяснено настолько просто, насколько это возможно. Если вы хотите увеличить сложность вашего первого глобального модуля, тогда вы, очевидно, можете играть с аргументами (типичные задачи CLI). Следующий модифицированный скрипт будет принимать и ожидать имя в качестве аргумента нашего dosomethingawesome команда:

#!/usr/bin/env node
// Delete the 0 and 1 argument (node and script.js)
var args = process.argv.splice(process.execArgv.length + 2);
// Retrieve the first argument
var name = args[0];
var myLibrary = require('../lib/index.js');
// Displays the text in the console
myLibrary.say(name + ', get back, come on before we crack Lose your blues, everybody cut footloose');

Который может быть запущен с помощью:

dosomethingawesome Carlos

И будет генерировать вывод:

Глобальный командный узел CLI с аргументом

Если вы действительно хотите работать с аргументами и опциями в вашем скрипте, мы рекомендуем использовать библиотеку для управления ими как командная строка-арг или же STDIO.

Ссылка на основную публикацию
Adblock
detector