Jalankan perintah dalam gulp untuk sub folder

Proyek saya disusun sebagai berikut:

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

Saya memiliki dua file package.json dan saya ingin menjalankan npm install pada package.json di dalam folder testcontent.

Jika di baris perintah saya pergi ke myapp/test/testcontent dan menjalankan npm install itu berfungsi dan membuat folder baru node_modules dengan dependensi dari package.json yang benar. Bagaimana hal itu bisa dilakukan dalam sekejap?

Saya mencoba yang berikut ini tetapi menggunakan package.json di myapp bukan yang ada di sub folder 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));
});

person Community    schedule 24.07.2016    source sumber


Jawaban (1)


gulp-exec adalah alat yang salah untuk pekerjaan ini. Faktanya, penulis plugin gulp-exec secara eksplisit menyarankan agar tidak menggunakannya seperti yang Anda lakukan:

Catatan: Jika Anda hanya ingin menjalankan perintah, jalankan saja perintahnya, jangan gunakan plugin ini

Sebagai gantinya, Anda menggunakan child_process.spawn() bawaan node.js. Anda dapat meneruskan direktori tempat perintah harus dijalankan menggunakan opsi cwd:

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

gulp.task('default', function(done) {
  spawn('npm', ['install'], { cwd: 'test/testcontent/', stdio: 'inherit' })
    .on('close', done);
});
person Sven Schoenung    schedule 24.07.2016
comment
Terima kasih, jadi bagaimana cara menyalurkannya ke proses lain? Katakanlah saya ingin menyalurkannya seperti inireturn gulp .src(config.alljs) .pipe($.if(args.verbose, $.print())) - person ; 24.07.2016
comment
Apa maksud Anda menyalurkannya ke proses lain? Apakah Anda ingin mengirim stdout dari npm install ke proses lain? Apa sebenarnya yang ingin Anda lakukan? - person Sven Schoenung; 24.07.2016
comment
Teladan Anda tidak masuk akal. Apa hubungannya mencetak nama file dengan menjalankan instalasi npm? Keduanya tidak berhubungan sama sekali. - person Sven Schoenung; 24.07.2016
comment
Misalnya jika Anda ingin melakukan instalasi npm dan juga ingin menyalin file dll, bagaimana Anda melakukannya? - person ; 24.07.2016
comment
Anda menulis satu tugas untuk menyalin file dan satu tugas untuk menjalankan instalasi npm. Kemudian Anda menjalankan kedua tugas tersebut. Karena kedua operasi tersebut sama sekali tidak memiliki kesamaan, maka keduanya harus berada dalam tugas yang terpisah. - person Sven Schoenung; 24.07.2016
comment
tetapi jika misalnya saya ingin dijalankan secara ‹b›default‹/b› spawn & copy & run mochaTest, bagaimana Anda melakukannya? bisakah Anda memberikan contoh? - person ; 24.07.2016
comment
Tidak, tidak di postingan ini. Saya menjawab pertanyaan awal Anda. Anda mengajukan pertanyaan yang sangat berbeda sekarang. Buat postingan baru untuk itu. - person Sven Schoenung; 24.07.2016