Это не просто руководство, а также инструмент для вывода моего резюме через командную строку O(∩_∩)O ха-ха~, очень забавно выглядит.
Исправлено:
# Global installation, in case of an installation error, it's necessary to specify before the command `sudo`
$ sudo npm install -g wcj
# Display help
$ wcj -h
Usage: wcj my personal command for fun![options] <package>
Commands:
resume|rs [options] [cmd] Details about my resume!
Options:
-h, --help output usage information
-V, --version output version number
# Display help for subcommand
$ wcj rs -h
Usage: resume|rs [options] [cmd]
Details about my resume!
Options:
-h, --help output usage information
-b, --basicinfo [type] basic information
-e, --education [type] education
Description of basicinfo:
preview Preview of the resume
-b, --basicinfo базовая информация
name : имя
height : рост
dateOfBirth : дата рождения
workExperience : опыт работы
mobile : мобильный телефон
telephone : домашний телефон
email : адрес электронной почты
residency : место жительства
currentSituation : текущее положение
currentCity : город проживания
nation : страна
region : регион
postalCode : почтовый индекс
ID : номер удостоверения личности
website : личный сайт
maritalStatus : семейное положение
politicalStatus : политическое положение
-e, --education образование
```# Initial point of studyПри использовании Node.js
, многие пакеты поддерживают глобальное установление, предоставляя одну команду, с помощью которой можно выполнять различные задачи в командной строке. Иногда нам также требуется разрабатывать такие командные инструменты. В `Node.js` создание консольного инструмента оказывается очень простым, поэтому я решил узнать, как использовать `Node.js` для создания своих собственных команд, что будет полезно в будущих проектах.- Сначала создадим небольшой пример, чтобы почувствовать прелесть командной строки.
ls
— просмотр текущей директории.ls -a
— просмотр текущей директории, включая скрытые файлы.Перед началом работы убедитесь, что вы уже установили Node.js. Вы можете запустить which node
в командной строке, чтобы проверить наличие установки, или выполнить node -v
для просмотра версии Node. Если Node установлен, вы должны видеть что-то подобное:
$ which node
/usr/local/bin/node
$ node -v
v0.10.36
Создайте любой каталог, инициализируйте файл package.json
, затем создайте каталог bin
внутри этого каталога:
$ mkdir wcj # создаем каталог
$ cd wcj && mkdir bin
$ npm init # инициализируем файл package.json
Перейдите в каталог bin
, создайте файл wcj.js
(выберите имя самостоятельно), и напишите следующий код, добавив строку #!/usr/bin/env node
в начало файла:
#!/usr/bin/env node
var fs = require("fs"),
path = process.cwd();
``````javascript
var run = function (obj) {
if (obj[0] === '-v') {
console.log('версия 1.0.0');
} else if (obj[0] === '-h') {
console.log('Использование:');
console.log(' -v --версия [показывает версию]');
} else {
fs.readdir(path, function (err, files) {
if (err) {
return console.log(err);
}
for (var i = 0; i < files.length; i += 1) {
console.log(files[i]);
}
});
}
};
```// Получение аргументов после первого аргумента, разделенных пробелами
run(process.argv.slice(2));
Вышеуказанная строка #!/usr/bin/env node
называется shebang
, она указывает на то, что текущий файл следует выполнять с помощью программы, указанной в пути после этой строки. Также потребуется файл package.json
.```json
{
"name": "wcj",
"version": "1.0.0",
"description": "wcj ---",
"repository": {
"type": "git",
"url": "https://github.com/jaywcjlove/wcj.git"
},
"main": "index.js",
"bin": { "wcj": "bin/wcj.js" },
"author": "kenny wang wowohoo@qq.com",
"license": "MIT"
}
Запуск `node bin/wcj.js` отображает все файлы и папки в текущей директории. Этот скрипт действительно работает. Дополнительная информация о команде `npm link` доступна [здесь](https://docs.npmjs.com/cli/link).
В поле `bin` файла `package.json` указано, что команда `wcj` связана с вашим скриптом `bin/wcj.js`. [Дополнительно про bin](https://docs.npmjs.com/files/package.json#bin)
Этот инструмент использует правила версионирования [semver](http://semver.org/lang/ru-RU/).
"bin": { "wcj": "bin/wcj.js" }
[Пример исходного кода](https://github.com/jaywcjlove/wcj/blob/master/examples/ls.js)
## Глобальная установка и запуск
> Убедитесь, что вы добавили поле `bin` в файл `package.json`. Затем откройте консоль и перейдите в директорию `wcj`.
### Установка
Если при выполнении команды в проектной директории возникают проблемы, можно установить модуль глобально:
sudo npm install . -g
### Связывание
Или вы можете использовать команду `npm link`, которая автоматически создаст глобальную символьную ссылку, после чего вы сможете использовать свою команду.```shell
$ wcj
# README.md
# bin
# package.json
$ wcj -v
# Версия 1.0.0
$ wcj -h
# Использование:
# -v --version [показывает версию]
При выполнении команды sudo npm install . -g
могут появиться предупреждения, которые можно игнорировать.
Если вы уже выполнили npm link
, повторное использование этой команды приведет к следующей ошибке:
npm link
npm ERR! Darwin 14.3.0
npm ERR! argv "node" "/usr/local/bin/npm" "link"
npm ERR! node v0.10.36
npm ERR! npm v2.7.1
npm ERR! path /usr/local/bin/wcj
npm ERR! code EEXIST
npm ERR! Refusing to delete: /usr/local/bin/wcj not in /Applications/XAMPP/xamppfiles/htdocs/git/github.com/myJS/wcj
File exists: /usr/local/bin/wcj
Move it away, and try again.
Вы должны удалить /usr/local/bin/wcj
перед тем как снова выполнить npm link
. Для этого используйте команду rm -rf /usr/local/bin/wcj
.
Размещение требует регистрации аккаунта на npm и github. Подробнее узнайте на сайте Google. Также есть руководство на JSLite.io.
npm publish
Предположим, что вы уже опубликовали пакет на npm, тогда вы можете выполнить следующую команду:
sudo npm install -g wcj
Пример загрузки: v1.0.1
Основные преимущества Commander заключаются в следующем:
Автоматическое логирование кода, автоматическая генерация справочной информации, объединение коротких опций ("-A -B -C" == "-ABC"), установка значений по умолчанию, обязательные опции, анализатор команд, поддержка запросов
## API
`Option()`: Инициализирует объект с пользовательской опцией, задает "ключевые слова" и "описание"
`Command()`: Инициализирует объект с параметрами командной строки, получает данные из командной строки
`Command#command()`: Определяет имя команды
`Command#action()`: Регистрирует обратный вызов функции
`Command#option()`: Определяет параметры, требуется задать "ключевые слова" и "описание", ключевые слова включают "краткие" и "полные" формы, разделенные запятой, вертикальной чертой, пробелами
`Command#parse()`: Анализирует параметры командной строки argv
`Command#description()`: Устанавливает значение description
`Command#usage()`: Устанавливает значение usage
Ссылка: [официальная документация примеров](http://tj.github.io/commander.js)
## Установка commander
sudo npm install commander
## Опция
Внутренние опции Built-in option, Commander предоставляет по умолчанию опцию `-h`.
```js
#!/usr/bin/env node
var program = require("commander");
program
.version('0.0.1')
.option("-r, --resume", "резюме");
program.parse(process.argv);
Функция parse
выполняет обработку определенных опций и подкоманд, анализирует параметры командной строки и активирует соответствующие обратные вызовы (будет рассмотрено ниже).```shell
./bin/wcj.js -h
Использование: wcj [опции]
Опции:
-V, --version выводит номер версии
-r, --resume резюме
По умолчанию есть параметр -h
, при передаче которого будет выведена информация о команде wcj
.
Добавьте параметр option
для команды wcj
, чтобы показать, что это мое резюме.
program
.version('0.0.1')
.option('-r|--resume', 'резюме');
program.parse(process.argv);
if (program.resume) {
console.log('резюме - '
+ 'это моё резюме!'
);
}
option()
принимает четыре аргумента:
-r
и длинный параметр --resume
. Разделение осуществляется с помощью |
или ,
.При получении неопределённого параметра программа автоматически выбрасывает ошибку.
./bin/wcj.js --res
## Выдает следующее сообщение
ошибка: неизвестный параметр '--res'
Команда Commander предоставляет API для отключения этой автоматической системы ошибок, используя метод .allowUnknownOption()
.
#!/usr/bin/env node
program
.allowUnknownOption()
.version('0.0.1')
.option('-r, --resume', 'резюме');
program.parse(process.argv);
// Пропущены некоторые детали...
```## Типы параметров
Поддерживаемые типы параметров командами включают `required`, `optional` и `boolean`.
### required и optional
Первый аргумент параметра также может указывать тип параметра, разделителем является `|` или `,`.
- `<lang>` обязательный параметр, требует значения после себя, иначе программа выбросит ошибку.
- `[db]` необязательный параметр, который может иметь значение или нет.
```js
#!/usr/bin/env node
var program = require('commander');
program
.allowUnknownOption()
.version('0.0.1')
.option('-r, --resume', 'резюме')
.option('-l, --language <lang>', 'этот язык, которым я владею.')
.option('-d, --database [db]', 'эта база данных, которую я знаю', 'MySQL')
.parse(process.argv);
if (program.resume) {
console.log('резюме'
+ '-'
+ 'это мое резюме!');
}
if (program.language) {
console.log('язык: `' + program.language + '`');
}
if (program.database) {
console.log('база данных: `' + program.database + '`');
}
проверьте результат
./bin/wcj.js -l python
## вывод
язык: `python`
база данных: `MySQL`
./bin/wcj.js -l
## вывод
ошибка: аргумент для опции `-l, --language <lang>` отсутствует
Значение опции типа boolean, как в примере с --date
, по умолчанию равно false
. Когда используется этот параметр, значение program.date
становится true
, в противном случае — false
.
Также существует вариант опции типа boolean
: когда длинное имя опции (long option
) начинается со слова no-
, значение по умолчанию равно true
. Например,```js
var программа = require('commander');
программа
.option('-d, --no-дата', 'не показывать текущую дату')
.parse(process.argv);
var dt = new Date(); if (программа.дата) { console.log(dt.getFullYear() + '-' + (dt.getMonth() + 1) + '-' + dt.getDate()); }
Когда параметр `-d` не указан, его значение по умолчанию равно `true`.
## Автоматическая помощь (--help)
Библиотека Commander автоматически генерирует информацию о помощи на основе настроенных опций и подкоманд.
### Пользовательская помощь
Вы можете использовать событие `--help`, чтобы вывести дополнительную информацию о помощи, как это сделано ниже для команды `fe`:
```js
// должно быть до .parse(), так как метод emit() ноды выполняется сразу
программа.on('--help', function () {
console.log(' Пример использования:');
console.log('');
console.log(' Вывод команды wcj -d');
console.log(' Вывод команды wcj -l python');
console.log('');
});
программа.parse(process.argv);
Результат будет следующим:
./bin/wcj.js -h
Использование: wcj [опции]
Опции:
-h, --help вывод информации о помощи
-d, --no-дата показать текущее время
-l, --язык <lang> Этот язык мне знаком.
-b, --база_данных [db] Это моя любимая база данных.
Пример использования:
Вывод команды wcj -d
Вывод команды wcj -l python
#!/usr/bin/env node
var программа = require('commander');
var appInfo = require('./../package.json');
программа
.version(appInfo.version)
.usage('это мои личные команды для игры! [опции] <пакет>')
```
Пример выполнения команд в указанном выше стиле Git:
```javascript
// Поддержка субкоманд в стиле Git
программа
// Определение субкоманды
.command('резюме <cmd>')
// Краткая форма команды
.alias('рс')
// Описание команды
.description('Здесь содержится информация о моем резюме!')
// Опции для команды резюме
.option('-н, --имя <режим>', 'Отображает мое имя')
// Регистрация обратного вызова
.action(function(cmd, options) {
let nm = typeof options.имя === 'string' ? options.имя : ''
console.log('резюме "%s" использует режим "%s"', cmd, nm);
})
.on('--help', function() {
// Вывод справочной информации для субкоманд
console.log(' Примеры использования:')
console.log(' $ ./bin/wcj.js резюме ss -н аaaaa')
console.log(' $ ./bin/wcj.js резюме ss')
console.log()
})
программа.parse(process.argv)
```
Пример вывода при выполнении команд:
```shell
$ ./bin/wcj.js резюме ss -н аaaaa
# Вывод:
резюме "ss" использует режим "аaaaa"
$ ./bin/wcj.js резюме ss
# Вывод:
резюме "ss" использует режим ""
```
## Обработка событий
Название каждого события должно совпадать с названием команды, `--help` — это событие по умолчанию.
```shell
программа.on('--help', function(argv, test) {
process.exit(1)
})
```
# Yargs
Командная строковая библиотека Yargs обеспечивает взаимодействие вашего приложения [Yargs для GitHub](https://github.com/bcoe/yargs)
``````js
var argv = require('yargs').argv;
if (argv.l === 'zh-cn') {
console.log('Китайский сайт!');
} else if (argv.l === 'en') {
console.log('Английский сайт!');
}
```
Использование:
```js
var argv = require('yargs').argv;
if (argv.l === 'zh-cn') {
console.log('Китайский сайт!');
} else if (argv.l === 'en') {
console.log('Английский сайт!');
}
```
# Дополнительные материалы для чтения
Первый маленький пример был создан после прочтения множества статей, вот некоторые из них:
- [Создание командной строки с помощью Node.js](http://binbinliao.com/programming/commandline-nodejs.html)
- [Командная строка с использованием Node.js](http://cruft.io/posts/node-command-line-utilities/)
- [Создание командной строки с помощью Node.js](http://zdan.me/post/Yöntemleri.html)
- [commander.js](https://github.com/tj/commander.js)
- [Примеры использования commander.js](http://tj.github.io/commander.js/)
- [node-optimist](https://github.com/substack/node-optimist)
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )