Содержание
Многие разработчики публикуют свои пакеты на 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
:
Или вручную создавая 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"
}
Этого должно быть достаточно для нашего примера модуля, просто не так ли? Структура модуля будет такой:
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 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
И будет генерировать вывод:
Если вы действительно хотите работать с аргументами и опциями в вашем скрипте, мы рекомендуем использовать библиотеку для управления ими как командная строка-арг или же STDIO.