2016-04-14 16 views
10

Wie wird ein npm-Skriptbefehl innerhalb einer Schluckaufgabe ausgeführt?Ausführen eines npm-Skripts aus der Schlucktask

package.json

"scripts": 
{ 
    "tsc": "tsc -w" 
} 

gulpfile.js

gulp.task('compile:app', function(){ 
    return gulp.src('src/**/*.ts') 
    .pipe(/*npm run tsc*/) 
    .pipe(gulp.dest('./dist')) 
    .pipe(connect.reload()); 
}); 

Ich möchte, dies zu tun, weil npm run tsc läuft mir keine Fehler nicht geben, aber wenn ich gulp-typescript verwenden zu kompilieren .ts dann bekomme ich Haufen von Fehlern.

+1

Haben Sie dieses Plugin versucht? https://www.npmjs.com/package/gulp-shell ... '.pipe (Shell ('npm run tsc'))' ... –

+1

Sie verlieren [inkrementelle Kompilierung] (https: //www.npmjs.com/package/gulp-typescript#incremental-compilation) Wenn Sie das tun, obwohl – CodingIntrigue

+0

@RGraham Ich bin nicht klar auf die Vorteile entweder. – lbrahim

Antwort

9

Sie erhalten die gulp-typescript

var gulp = require('gulp'); 
var ts = require('gulp-typescript'); 

gulp.task('default', function() { 
    var tsProject = ts.createProject('tsconfig.json'); 

    var result = tsProject.src().pipe(ts(tsProject)); 

    return result.js.pipe(gulp.dest('release')); 
}); 

gulp.task('watch', ['default'], function() { 
    gulp.watch('src/*.ts', ['default']); 
}); 

Dann auf Ihrem package.json

"scripts": { 
    "gulp": "gulp", 
    "gulp-watch": "gulp watch" 
} 
mit gleichwertig mit implementieren

Dann

npm run gulp-watch 

Alternativ shell

var gulp = require('gulp'); 
var shell = require('gulp-shell'); 

gulp.task('default', function() { 
    return gulp.src('src/**/*.ts') 
    .pipe(shell('npm run tsc')) 
    .pipe(gulp.dest('./dist')) 
    .pipe(connect.reload()); 
}); 

gulp-shell mit ausgeführt wurde blacklisted you can see why here gewesen

Eine andere Alternative wäre webpack einzurichten.

+0

Wie kann ich Schluckuhr zusammen mit npm Start ausführen. Ich habe versucht, aber am npm Start wird das scss nicht zu css kompiliert, wie es sein sollte. Hier ist der Code in package.json: "start": "gleichzeitig" npm run tsc: w \ "\ npm run lite \" \ "gulp \" ", –

+0

Die Ausführung des Befehls über die Befehlszeile funktioniert einwandfrei. Ich bekomme 'ReferenceError: connect is not defined', aber selbst nach der Installation von' gulp-connect' habe ich events.js: 141 throw er; // Nicht behandelte 'Fehler' Ereignis ^ Fehler: Spawn NPM Lauf buildng ENOENT bei exports._errnoException (util.js: 907: 11) bei Process.ChildProcess._handle.onexit (intern/child_process.js: 178: 32) bei onErrorNT (internal/child_process.js: 344: 16) bei nextTickCallbackWith2Args (node.js: 442: 9) bei process._tickCallback (node.js: 356: 17) Prozess mit Code 1 beendet. –

+0

Beachten Sie, dass "gulp-shell" von "gulp" auf die schwarze Liste gesetzt wurde. Verwenden Sie stattdessen 'child_process.exec' oder' child_process.spawn'. Siehe https://stackoverflow.com/questions/29511491/running-a-shell-command-from-gulp – toszter

5

Sie können versuchen, es childprecess Knoten Paket oder

Verwendung https://www.npmjs.com/package/gulp-run

var run = require('gulp-run'); 
gulp.task('compile:app', function(){ 
    return gulp.src(['src/**/*.js','src/**/*.map']) 
    .pipe(run('npm run tsc')) 
    .pipe(gulp.dest('./dist')) 
    .pipe(connect.reload()); 

}); 
+0

Funktioniert nicht. Erhalte Fehler und veraltet ihn. – lbrahim

+0

https://github.com/sun-zheng-an/gulp-shell Überprüfen Sie dies, dies funktioniert möglicherweise mit den neuesten Knoten Versionen – LazyDeveloper

+0

Funktioniert gut für mich, danke! – pixeline

Verwandte Themen