1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jaywcjlove-wcj

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 26 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.03.2025 00:14 46e7f7a

wcj

Это не просто руководство, а также инструмент для вывода моего резюме через командную строку 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

Размещение требует регистрации аккаунта на npm и github. Подробнее узнайте на сайте Google. Также есть руководство на JSLite.io.

npm publish

Установка

Предположим, что вы уже опубликовали пакет на npm, тогда вы можете выполнить следующую команду:

sudo npm install -g wcj

Пример загрузки: v1.0.1

Commander

Основные преимущества 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

Команды в стиле git

Пример кода

#!/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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/jaywcjlove-wcj.git
git@api.gitlife.ru:oschina-mirror/jaywcjlove-wcj.git
oschina-mirror
jaywcjlove-wcj
jaywcjlove-wcj
master