- Я использую Shipit для развертывания.
- При развертывании Shipit извлекает текущий Git Sha в каталог tmp, затем я запускаю
npm install
, а затемgulp build
, затем продолжаю развертывание. - Shipit использует Orchestrator для выполнения своих задач, как и Gulp.
- У Shipit есть собственный интерфейс командной строки, поэтому я могу выполнить развертывание с помощью
shipit development deploy
.
Все вышеперечисленное работает. Что я пытаюсь сделать, так это создать задачу gulp deploy
, которая будет инициализировать Shipit напрямую, вместо использования CLI. Выглядит примерно так:
gulp.task('shipit:deploy', function() {
var deployToEnv = argv['deploy-to'] || false;
var shipit;
return inquirer.prompt([{
type: 'list',
name: 'deployToEnv',
default: deployToEnv,
message: 'Deploy to environment:',
choices: envs
}]).then(function(answers) {
deployToEnv = answers.deployToEnv;
shipit = new Shipit({environment: deployToEnv});
shipit.initialize();
shipit.start('deploy');
});
});
Соответствующая конфигурация корабля:
shipit.initConfig(config);
shipit.blTask('build', function() {
return shipit.local('npm install --silent', {
cwd: shipit.config.workspace
}).then(function() {
return shipit.local('gulp build', {
cwd: shipit.config.workspace
});
});
});
shipit.on('fetched', function() {
shipit.start('build');
});
Кажется, все работает с одной проблемой: на самом деле он не выполняет npm install
!
Running "npm install --silent" on local.
Running "gulp build" on local.
Итак, может показаться, что что-то в команде npm install
преждевременно разрешает промис, но я не уверен, как и почему.
У меня была похожая проблема (просто с использованием shipit cli) с предупреждениями npm, когда я обнаружил, что использование --silent arg решило это.
В качестве теста я оставил код как есть, но заменил npm install --silent
на sleep 10
. Конечно же, он ждал 10 секунд, прежде чем выполнить gulp build
. Так что, казалось бы, с командой npm install
что-то особенное.
Любая помощь приветствуется!
Обновление №1:
shipit.local
использует child_process.exec
. Я попытался преобразовать это, чтобы использовать child_process.spawn
, но получил тот же результат.
Обновление №2:
Если я изменю команду на sudo npm install
, все будет работать как положено! Итак... что это значит и как избежать запуска с sudo
?
Обновление №3:
Все еще не могу сделать это без sudo, но я попытался добавить флаг --verbose
с такими результатами:
Без sudo
:
@ npm info it worked if it ends with ok
@ npm verb cli [ '/Users/timkelty/.nvm/versions/node/v0.12.0/bin/node',
@ npm verb cli '/Users/timkelty/.nvm/versions/node/v0.12.0/bin/npm',
@ npm verb cli 'install',
@ npm verb cli '--verbose' ]
@ npm info using [email protected]
@ npm info using [email protected]
@ npm verb install where, deps [ '/Users/timkelty/tmp/edwards-garment-website', [] ]
@ npm verb install where, peers [ '/Users/timkelty/tmp/edwards-garment-website', [] ]
@ npm info preinstall [email protected]
@ npm info build /Users/timkelty/tmp/edwards-garment-website
@ npm verb linkStuff [ false, false, false, '/Users/timkelty/tmp' ]
@ npm info linkStuff [email protected]
@ npm verb linkBins [email protected]
@ npm verb linkMans [email protected]
@ npm verb rebuildBundles [email protected]
@ npm info install [email protected]
@ npm info postinstall [email protected]
@ npm verb exit [ 0, true ]
@ npm info ok
Running "gulp build" on local.
@ [15:14:32] Local gulp not found in ~/tmp/edwards-garment-website
@ [15:14:32] Try running: npm install gulp
'build' errored after 755 ms
Error: Command failed: /bin/sh -c gulp build
С sudo
:
Running "sudo npm install --verbose" on local.
@ npm info it worked if it ends with ok
@ npm verb cli [ '/Users/timkelty/.nvm/versions/node/v0.12.0/bin/node',
@ npm verb cli '/Users/timkelty/.nvm/versions/node/v0.12.0/bin/npm',
@ npm verb cli 'install',
@ npm verb cli '--verbose' ]
@ npm info using [email protected]
@ npm info using [email protected]
@ npm verb install where, deps [ '/Users/timkelty/tmp/edwards-garment-website',
@ npm verb install [ 'Select2',
@ npm verb install 'autoprefixer-core',
@ npm verb install 'babel',
... поэтому по какой-то причине при работе без sudo команда npm install, похоже, думает, что у нее нет никаких зависимостей для установки, поэтому она завершается без ошибок и переходит к моей следующей задаче.
npm install
без--silent
и затем распечатать console.log(res.stdout); и console.log(res.stderr)? - person vanadium23   schedule 05.05.2015child_process.exec
и stdout, и stderr являются пустыми строками: gist.github.com/4c0c905e2ab517806915 - person Tim Kelty   schedule 05.05.2015chmod -R 755
в каталоге, из которого я запускаю командуnpm install
, тот же результат. - person Tim Kelty   schedule 05.05.2015echo "$(which npm) test" >> test.file
вместоsleep 10
. Зачем это нужно? Во-первых, мы знаем, может ли gulp создать файл, во-вторых, мы знаем, может ли gulp использовать npm и какой именно. - person vanadium23   schedule 06.05.2015/Users/timkelty/.nvm/versions/node/v0.12.0/bin/npm test
- person Tim Kelty   schedule 06.05.2015sudo
- person Tim Kelty   schedule 08.05.2015