Запуск программы Node.js из командной строки без указания node

Рейтинг: 4Ответов: 3Опубликовано: 07.04.2015

Разрабатывается пакет для Node.js, в котором есть утилита для работы из командной строки. Сейчас alacon.js представляет собой JavaScript программу, размещенную в корне пакета. Для запуска этой утилиты приходится вводить слово node перед названием утилиты, например:

node alacon 'SELECT * FROM CSV("mydata.csv") ORDER BY 2'

Что нужно настроить в package.json, какие файлы надо создать и как сделать так, чтобы:

1.Для запуска этой утилиты не нужно было указывать слово node:

alacon 'SELECT 1+1'

2.Можно было бы установить пакет глобально и использовать утилиту:

npm install -g alasql

То есть, сделать так же, как это сделано в Jison, Gulp и многих других Node.js пакетах с утилитами?

Ответы

▲ 6Принят

Как правильно указали DAiMor и novus42, надо сделать ДВЕ вещи:

package.json

{ "bin" : { "alacon" : "./bin/alacon.js" } }

alacon.js

#!/usr/bin/env node

при выполнении npm install -g alasql бинарник ставится в директорию доступную через PATH.

При этом номерация параметров не изменится. Нулевой будет node(.exe) а первый alacon.js.

▲ 3

Документация по npm говорит, что для этого в package.json нужно добавить

{ "bin" : { "alacon" : "./bin/alacon.js" } }
▲ 3

Cтандартный способ в Юниксах это прописать первой строкой:

#!/usr/bin/env node

Потом сделать:

chmod +x <scriptname>

И запускать соответственно:

./scriptname