Я работаю над приложением, разработанным с использованием платформы ASP.NET MVC 5. Я использую Visual Studio 2013 для написания своего приложения.
Мне нужно использовать gulp, чтобы автоматизировать процесс компиляции файла sass и его публикации в файле bundle.css.
Для этого вот что я сделал
- На моем компьютере установлен NodeJs.
- Установлен gulp глобально с помощью
npm install -g gulp
- Создал файл с именем
gulpfile.js
в корне проекта проекта - создал файл
package.json
с помощью командыnpm init
- Добавлен gulp к моим зависимостям разработки, выполнив следующую команду из корня моего проекта
npm install gulp --save-dev
- Добавил код ниже в мой
gulpfile.js
Из командной консоли я запустил команду
gulp
, которая отобразила следующую информациюИспользование gulpfile...gulpfile.js
Начинаю смотреть...
Законченное «наблюдение» через 21 мс
Запуск "по умолчанию"...
Готово «по умолчанию» через 31 мкс
Но когда я пишу код в свой ~/Assets/Sass/**/*.sass
, ничего не сохраняется в ~/Public/Css/bundle.css
, как и ожидалось.
Вот как выглядит gulpfile.js
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'))
);
Что мне здесь не хватает? Как я могу заставить наблюдаемых смотреть и запускать задачи после каждого сохранения?
Обновлено
Я переключаюсь с использования плагина gulp-ruby-sass
на использование gulp-scss. Теперь у меня есть задача запускаться каждый раз, когда я сохраняю файл scss
, но по какой-то причине он не обновляет целевой файл.
Вот как выглядит мой файл gulpfile.js
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'));
});
~
). Попробуйте начать пути с./
вместо~/
. Кроме того, я бы проверил, работает ли ваша задачаcompileSass
должным образом при непосредственном вызове (без часов). - person Sergey K   schedule 29.08.2016~
на.
. вот ошибка'sass' is not recognized as an internal or external command, operable program or batch file. Error in plugin 'gulp-ruby-sass' Message: Gem undefined is not installed.
- person Junior   schedule 29.08.2016gulp-ruby-sass
, вам может потребоваться установить Ruby, а также гем sass на вашем компьютере - см. этот вопрос. Однако вам может быть проще просто использовать gulp-sass, если у вас нет хорошая причина использовать gulp-ruby-sass. - person Sergey K   schedule 29.08.2016gulp-scss
, и теперь каждый раз, когда я сохраняю файл с расширениемscss
, я вижу в консоли новую строку с надписьюStarting
compileScss.... Finished
compileScss`, но файл bundle.css не заполняется. и да, я добавляю код в свои файлы site.scss. Пожалуйста, взгляните на мой обновленный вопрос, чтобы увидеть мой текущий код - person Junior   schedule 29.08.2016gulp.src('./Assets/Scss/**/*.scss')
, добавив следующий сразу после этой строки:.pipe(debug({}))
. Затем запустите задачуcompileScss
и убедитесь, что она на самом деле находит файлы (в ней должны быть перечислены все имена файлов, соответствующие вашему шаблону глобуса — убедитесь, что она не говорит что-то вроде 0 элементов). - person Sergey K   schedule 30.08.2016.pipe(gulp.dest('./Public/Css/bundle.css'))
правильным способом указать, где должен находиться объединенный файл назначения? - person Junior   schedule 30.08.2016scss
, и в потоке нет обработчика ошибок, поэтому ошибка проглатывается. Вы можете попробовать добавить обработчик.on('error', ...)
в поток (вы можете установить gulp-util и передать его наgutil.log
). Я также настоятельно рекомендую вам использовать gulp-sass, а не gulp-scss, так как gulp-scss явно помечен как устаревший. - person Sergey K   schedule 30.08.2016gulp.task('default', ['watch']);
действительно является вашей основной задачей, вы можете немного упростить ее с помощьюgulp.task('default', function(){ gulp.watch('./Assets/Scss/**/*.scss', ['compileScss']) });
- person henry   schedule 30.08.2016