2016-07-24 2 views
1

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

myapp 
-server.js 
-test 
--testcontent 
---package.json 
-package.json 

У меня есть два package.json файлов, и я хочу, чтобы запустить npm install на package.json внутри папок testcontent.

Если в командной строке я иду myapp/test/testcontent и запустить npm install это работает, и это создает новую папку node_modules с зависимостями от правильного package.json. Как это можно сделать из-за глотка?

Я попытался следующие, но он использует package.json в myapp не один в папке testcontent к югу:

gulp.task('default', function() { 
    var options = { 
     continueOnError: true, // default = false, true means don't emit error event 
     pipeStdout: true, // default = false, true means stdout is written to file.contents 
     customTemplatingThing: "test" // content passed to gutil.template() 
    }; 
    var reportOptions = { 
     err: true, // default = true, false means don't write err 
     stderr: true, // default = true, false means don't write stderr 
     stdout: true // default = true, false means don't write stdout 
    } 
    gulp.src('test/testcontent/') 
     .pipe(exec('npm install' , options)) 
     .pipe(exec.reporter(reportOptions)); 
}); 

ответ

3

gulp-exec неправильный инструмент для этой работы. На самом деле авторы gulp-exec плагин explicitly advise против использования его так, как вы делаете:

Примечание: Если вы просто хотите, чтобы выполнить команду, просто запустите команду, не используйте этот плагин

Вместо этого вы используете node.js встроенный child_process.spawn(). Вы можете передать каталог, в котором команда должна быть выполнена с использованием опции cwd:

var spawn = require('child_process').spawn; 

gulp.task('default', function(done) { 
    spawn('npm', ['install'], { cwd: 'test/testcontent/', stdio: 'inherit' }) 
    .on('close', done); 
}); 
+0

Спасибо, так как мне по конвейеру другого процесса позволяет сказать, что я бледный конвейеру как thisreturn глоток .src (конфигурация. alljs) .pipe ($. if (args.verbose, $ .print())) –

+0

Что значит «передать его другому процессу»? Вы хотите отправить stdout из «npm install» в другой процесс? Что именно вы хотите сделать? –

+0

Ваш пример не имеет смысла. Что означает имена файлов для печати при выполнении «npm install»? Эти два не связаны вообще. –

Смежные вопросы