Оболочка с помощью Node.js

Мне интересно, есть ли какая-либо инфраструктура node или node lib, которую я могу использовать для написания сценариев оболочки? Например, у меня есть программа оболочки bash для установки инструментов Graphite и OpenTSDB RRD, я бы хотел использовать node.js для нее, возможно ли это?

Спасибо

Ответ 1

Взгляните на shelljs - он реализует функции оболочки и gnu coreutils. Вместе с coffeescript он может очень похож на оболочку script:

if not which 'git'
  echo 'Sorry, this script requires git'
  exit 1

# Copy files to release dir
mkdir '-p', 'out/Release'
cp '-R', 'stuff/*', 'out/Release'

# Replace macros in each .js file
cd 'lib'
for file in ls '*.js'
  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
  sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
cd '..'

# Run external tool synchronously
if (exec 'git commit -am "Auto-commit"').code != 0
  echo 'Error: Git commit failed'
  exit 1

Ответ 2

Вы должны проверить grunt, который представляет собой набор инструментов, помогающих людям писать сборку и другие скрипты в node.js. Есть тонна плагинов, которые помогут вам легко сделать интересные вещи.

Если вы знаете, что Bash, я просто придерживаюсь bash.

Посмотрите интересную тему в Twitter о Bash и сценариях Grunt

Что я использую Grunt для

  • Запуск инструментов Lint
  • Выполнение тестов JS Unit
  • Запуск предварительных процессоров (sass, require.js, uglify и т.д.)

Что я использую Capistrano * Для

  • Развертывание кода в производственных средах

Что я использую Bash ** для

  • Настройка серверов и их запуск и т.д.

  • * capistrano + git или chef или что-то еще
  • ** Bash или любые другие инструменты, которые вы хотите использовать

Ответ 3

Есть много, среди самых популярных там commander

npm install --save commander

Тогда запись команды довольно проста:

#!/usr/bin/env node

var program = require('commander');

program
  .version('0.0.1')
  .option('-f, --foo', 'enable some foo')
  .option('-b, --bar', 'enable some bar')
  .option('-B, --baz', 'enable some baz');

program.on('--foo', function(){
  console.log('Stuff!');
});