Представим ситуацию: прошла верстка сайта на gulp и посадка его на jekyll.

Наступил момент наполнения сайта контентом. А в jekyll это однотипные манипуляции по созданию файлов и папок с именами в транслите, датами и их размещение в определенные места сайта. Все это скучно и нудно до невозможности.

Конечно, ускорить процесс возможно с помощью плагина jekyll, но я пока не научился их создавать.

Пришла идея автоматизировать процесс с помощью скрипта запускаемого из под node.js, тем более gulp и есть пакет npm. Но на сайте имеются категории которые несколько различаются по составу контента. Поэтому файлы необходимо генерировать в зависимости от типа контента (книги, цитаты, блокнот). Выполнить же это возможно запуская скрипт из командной строки с определенным аргументом. В зависимости от него будет выполнятся те или иные функции. Выполнил скрипт, запустил jekyll build, а затем деплой на хостинг с помощью gulp rsync.

В папке проекта создаю главный файл index.js (он отсутствовал по причине использования только gulp) и в него помещю код который и будет выполнять рутину. Теперь необходимо разобраться как запустить скрипт с аргументом и передать его параметр.

Команда запускающая скрипт будет выглядеть так:

npm start quotes

npm - понятно, start - запускает index.js определенный в package.json как:

"main": "index.js",
"scripts": {
	"start": "node index"
},

quotes - и есть тот самый аргумент, виновник данной заметки.

Разберемся как получить указанный аргумент quotes. В запускаемый скрипт index.js пишем следующий код:

var arg = process.argv[2];
console.log('Введен аргумент : ' + arg);

Объект process.argv будет являеться массивом и его элемент process.argv[2] будет иметь значение quotes.

Первые два значения массива являются информацией о файлах самой ноды и скрипта, а остальные будут аргументами.

Например:

npm start one two=3 three

вывод массива process.argv будет выглядеть так:

0: /usr/local/bin/node
1: /Users/mjr/work/node/index.js
2: one
3: two=3
4: three

Хотя можно забрать в массив только аргументы:

var arg = process.argv.slice(2)

Если необходимо воспользоваться аргументом вида ключ=значение:

node start two=3

Прежде чем полученное значение использовать (two=3), его надо разобрать. Самый удобный способ это сделать заключается в использовании библиотеки minimist, которая предназначена для облегчения работы с аргументами командной строки:

var arg = require('minimist')(process.argv.slice(2))
arg['two'] //значение 3
(3)   (3)   (2)   (1)