2016-08-29 3 views
1

Ich arbeite an einer Anwendung, die mit ASP.NET MVC 5 Framework entwickelt wird. Ich verwende Visual Studio 2013, um meine Anwendung zu schreiben.Wie bekomme ich Schluck zu sehen, meine Sass-Datei Änderungen und erstellen Sie eine CSS-Datei?

Ich muss gulp verwenden, um den Prozess der Kompilierung meiner Sass-Datei zu automatisieren und sie in einer bundle.css-Datei zu veröffentlichen.

, das zu tun, hier ist das, was ich

  1. installiert NodeJs auf meinem Rechner
  2. installiert gulp global mit npm install -g gulp
  3. Erstellt eine Datei namens gulpfile.js in dem Stammprojekt des Projektes
  4. getan habe
  5. erstellt die package.json Datei mit npm init Befehl
  6. Hinzugefügt Schluck zu meinem Entwicklung Abhängigkeiten von der Wurzel meines Projekts den folgenden Befehl ausführen npm install gulp --save-dev
  7. Added den Code unten zu meinem gulpfile.js
  8. Von der Kommandokonsole feuerte ich gulp Befehl, der die folgenden Informationen angezeigt

    Mit gulpfile ... gulpfile.js

    Start 'watch' ...

    Finished 'Uhr' nach 21 ms

    Start 'default' ...

    Fertig 'default' nach 31 us

Aber wenn ich Code in meine ~/Assets/Sass/**/*.sass nichts schreiben wird in ~/Public/Css/bundle.css gespeichert als

Hier erwarten ist, was gulpfile.js sieht aus wie

const gulp = require('gulp'), 
     sass = require('gulp-ruby-sass'); 

// Default task which will be be fired when the runner is started 
gulp.task('default', ['watch']); 

// listener task 
gulp.task('watch', function(){ 

    //Watch any change in the sass directory and trigger the "compileSass" for every save 
    gulp.watch('~/Assets/Sass/**/*.sass', ['compileSass']); 

}); 

// Task to compile the sass files 
gulp.task('compileSass',() => 
    sass('~/Assets/Sass/**/*.sass') 
     .on('error', sass.logError) 
     .pipe(gulp.dest('~/Public/Css/bundle.css')) 
); 

Was fehlt mir hier? Wie kann ich die Betrachteten dazu bringen, die Aufgaben nach jedem Speichern zu beobachten und abzufeuern?

Ich schalte in mit gulp-scss verwenden gulp-ruby-sass Plugin aktualisiert. Nun habe ich die Aufgabe jedes Mal ausgeführt, wenn ich eine scss Datei speichere, aber aus irgendeinem Grund wird die Zieldatei nicht aktualisiert.

Hier ist, wie meine gulpfile.js Datei aussieht

const gulp = require('gulp'), 
     scss = require('gulp-scss'); 

// Default task which will be be fired when the runner is started 
gulp.task('default', ['watch']); 

// listener task 
gulp.task('watch', function(){ 

    //Watch any change in the "Sass" directory and trigger the "compileScss" for every save 
    gulp.watch('./Assets/Scss/**/*.scss', ['compileScss']); 

}); 

// Task to compile the "Scss" files 
gulp.task('compileScss', function() { 
    gulp.src('./Assets/Scss/**/*.scss') 
     .pipe(scss({ "bundleExec": true })) 
     .pipe(gulp.dest('./Public/Css/bundle.css')); 
}); 
+1

Ich bin mir nicht sicher, gulp versteht die Tilde im Pfad ('~'). Versuchen Sie, Ihre Pfade mit '. /' Anstelle von '~ /' zu beginnen. Außerdem würde ich überprüfen, ob Ihre 'compileSass'-Aufgabe wie erwartet funktioniert, wenn sie direkt (ohne die Uhr) aufgerufen wird. –

+0

Vielen Dank für diesen nützlichen Hinweis! Jetzt bekomme ich einen neuen Fehler, nachdem ich '~' in '.' geändert habe. Hier wird der Fehler '' sass 'nicht als interner oder externer Befehl, ausführbares Programm oder Batchdatei erkannt. Fehler im Plugin 'gulp-ruby-sass' Nachricht: Gem undefined ist nicht installiert.' –

+0

Wenn du' gulp-ruby-sass' verwenden willst, musst du möglicherweise Ruby und das Sass-Juwel auf deinem Rechner installiert haben - siehe [diese Frage] (http://stackoverflow.com/questions/24937506)/gulp-ruby-sass-nicht-ein-erkannt-Befehl-in-Windows). Sie können es jedoch einfacher finden, stattdessen [gulp-sass] (https://www.npmjs.com/package/gulp-sass) zu verwenden, es sei denn, Sie haben einen guten Grund, Schluck-Rubin-Hass zu verwenden. –

Antwort

0

Sie können fehlen, die erfordern für schluck-watch:

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

Von gulp-watch:

watch (glob, [Optionen, Rückruf]) Erstellt einen Beobachter, der Dateien ausspioniert, die mit glob übereinstimmen, die eine Glob-Zeichenfolge oder ein Array von Glob-Strings sein können.

Gibt einen Durchgangsstrom zurück, der Vinyl-Dateien (mit der zusätzlichen Ereigniseigenschaft ) ausgibt, die dem Ereignis im Dateisystem entsprechen.

Sie müssen eine Funktion bereitstellen. Das bedeutet, dass ein Aufgabenname nicht ausreicht.

Versuchen schluck-Batch mit einigen Aufgaben withing Ihre Uhr laufen:

npm install gulp-batch --save-dev 

Ihre Uhr Aufgabe:

// listener task 
gulp.task('watch', function(){ 

    var watch = require('gulp-watch'); 
    var batch = require('gulp-batch'); 

    //Watch any change in the sass directory and trigger the "compileSass" for every save 
    watch('~/Assets/Sass/**/*.sass', batch(function (events, done) { 
     // run your compileSass task 
     gulp.start('compileSass', done); 

    })); 

}); 

Edit:

Sie können Aufgaben ausführen von Visual Studio 2015 im Fenster "Task Runner Explorer".

Wenn Sie jedoch eine Eingabeaufforderung haben gulp-watch sollte es den gleichen Effekt haben und Ihre Compile-Task ausführen, wenn Änderungen an den Dateien, die Sie beobachten, unabhängig davon, wo sie bearbeitet wurden.

+0

Jetzt sieht die Konsole nicht einmal so aus, als würde sie zusehen. Es hat einfach den Befehl ausgeführt und Sie zur Eingabe eines neuen Befehls aufgefordert. Ich glaube, Schluck kommt mit einer Uhr api, mit der Sie die Dateien ansehen können. Hier ist ein Tutorial, das zeigt, wie man es benutzt, dem ich gefolgt bin https://scotch.io/tutorials/automate-your-tasks-easily-with-gulp-js –

+0

Entschuldigung. Um ehrlich zu sein, habe ich die eingebaute Uhr von Gulp nie benutzt. Sogar die Schluck-Evangelisten schlagen die Plug-in-Schluckuhr vor. Also nahm ich an, das war der Standard. In jedem Fall würde es mich interessieren, wenn du es funktionierst, zu wissen, wie du es zum Laufen gebracht hast. Ich wünschte ich könnte dir mehr helfen. –

+0

Es ist nicht ungewöhnlich, 'gulp.watch' zu verwenden. 'gulp-watch' hat einige großartige Funktionen, aber in einem einfachen Fall wie diesem ist es nicht nötig, das zusätzliche node-modules Gewicht und gulfile Gewicht hinzuzufügen. @WilmerSaint Sie können 'gulp.watch' in wenigen Sekunden lernen - sehen Sie sich die Aufgabe" sass: watch "in https://www.npmjs.com/package/gulp-sass an – henry

0

Grundlegende Dinge zu überprüfen sind Ordner Speicherort Existenz, Dateinamen und Lese-/Schreibberechtigungen.

Beispiel gulpfile.js, das gulp.watch und gulp-load-plugins in einem Projekt Zurb Foundation 6 verwendet (foundation-cli).

Beachten Sie, dass .pipe(gulp.dest('../your/path/css')); keine ~ enthält oder geben Sie einen Dateinamen oder eine Erweiterung an. Es gibt nur einen Pfad an. Die Datei in diesem Pfad erhält den Standardnamen style.css, da der Name der Quelldatei style.scss ist. Siehe Zeile gulp.src('scss/style.scss').

var gulp = require('gulp'); 
var $ = require('gulp-load-plugins')(); 

// Multiple locations of SCSS to combine 
var sassPaths = [ 
    'bower_components/foundation-sites/scss', 
    'bower_components/motion-ui/src' 
]; 

gulp.task('sass', function() { 
    return gulp.src('scss/style.scss')   // SCSS Source file 
    .pipe($.sass({ 
     includePaths: sassPaths, 
     outputStyle: 'compressed'    // if css compressed **file size** 
    }) 
     .on('error', $.sass.logError)) 
    .pipe($.autoprefixer({ 
     browsers: ['last 2 versions', 'ie >= 9'] 
    })) 
    .pipe(gulp.dest('../your/path/css'));  // OUTPUT Destination 
}); 

gulp.task('default', ['sass'], function() { 
    gulp.watch(['scss/**/*.scss'], ['sass']); // FILES to Watch 
}); 
Verwandte Themen