Оболочка с помощью 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!');
});