Gulp меньше, чем обработка включает корректно, включенные переменные не определены
Я использую less и Grunt и перехожу к gulp.
Мое меньше работает. Когда я запускаю:
lessc public/less/myapp.less
Я получаю рабочий выход без ошибок. Все мои меньшие, в том числе включенные, публично/меньше, BTW. Вот мой gulpfile:
var gulp = require('gulp');
var prefixer = require('gulp-autoprefixer');
var less = require('gulp-less');
gulp.task('compileLess', function () {
gulp
.src('./public/less/*')
.pipe(less({
paths: ['./public/less'], // Search paths for imports
filename: 'myapp.less'
}))
.pipe(gulp.dest('./public/css'));
});
// The default task (called when you run `gulp`)
gulp.task('default', function() {
gulp.run('compileLess');
// Watch files and run tasks if they change
gulp.watch('./public/less/*.less', function(event) {
gulp.run('less');
});
});
Когда я запускаю gulp, я получаю:
~/Documents/myapp: gulp
[gulp] Using file /Users/me/Documents/myapp/gulpfile.js
[gulp] Working directory changed to /Users/me/Documents/myapp
[gulp] Running 'default'...
[gulp] Running 'compileLess'...
[gulp] Finished 'compileLess' in 11 ms
[gulp] Finished 'default' in 41 ms
stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: variable @brightblue is undefined
@brightblue определяется в файле, импортированном в начале myapp.less.
@import "./colors.less";
body {
background-color: @brightblue;
}
- Почему не входит gulp в мой вклад? Указание параметра "пути" для меньшего количества должно заставить его работать, но это не исправление.
- Какой хороший способ отладить это? Например, у меня нет номера строки.
- Есть ли способ сделать работу gulp?
Ответы
Ответ 1
Разница заключалась в том, что я компилировал:
- Когда я запускал
lessc myapp.less
, я составлял основной файл меньшего размера и его зависимости
- Когда я запускал
gulp
с помощью gulpfile выше, я составлял каждый файл меньше по отдельности, потому что gulp.src был *.less
not myapp.less
. Поскольку эти меньше файлов загружаются только из основного файла меньшего размера, у них не было @imports для того, на что они зависят (из-за того, что myapp.less зависит от них). Например, нет смысла импортировать, скажем, "theme.less" в каждый отдельный файл, а не просто импортировать его сначала в myapp.less.
Здесь рабочая версия:
// Run 'gulp' to do the important stuff
var gulp = require('gulp');
var prefixer = require('gulp-autoprefixer');
var less = require('gulp-less');
var path = require('path');
gulp.task('less', function () {
gulp
.src('./public/less/myapp.less') // This was the line that needed fixing
.pipe(less({
paths: ['public/less']
}))
.pipe(prefixer('last 2 versions', 'ie 9'))
.pipe(gulp.dest('./public/css'));
});
// The default task (called when you run `gulp`)
gulp.task('default', function() {
gulp.run('less');
// Watch files and run tasks if they change
gulp.watch('./public/less/*.less', function(event) {
gulp.run('less');
});
});
Изменить: см. ниже @noducks ответ на улучшенную версию, которая работает с последним gulp.
Ответ 2
Заметили пару предупреждений об отказе от gulp.run
. Это исправляет их и добавляет некоторую обработку ошибок. У меня немного другая структура каталогов.
'use strict';
var gulp = require('gulp');
var prefixer = require('gulp-autoprefixer');
var less = require('gulp-less');
var gutil = require('gulp-util');
var plumber = require('gulp-plumber');
gulp.task('less', function() {
gulp
.src('./less/app.less')
.pipe(plumber(function(error) {
gutil.log(gutil.colors.red(error.message));
gutil.beep();
this.emit('end');
}))
.pipe(less())
.pipe(prefixer('last 2 versions', 'ie 9'))
.pipe(gulp.dest('./css'));
});
gulp.task('less:watch', function(){
gulp.watch(['./less/*.less', './less/module/*.less'], ['less']);
});
gulp.task('default', ['less','less:watch']);
Ответ 3
Вот моя рабочая версия, используя gulp-watch
и gulp-connect
для живой перезагрузки.
gulp.task('less:dev', function () {
gulp
.src('app/styles/**/*.less', {read: false})
.pipe(watch(function () {
return gulp
.src('app/styles/main.less')
.pipe(less())
.pipe(gulp.dest('app/styles/'))
.pipe(connect.reload());
}));
});
Ответ 4
Другая причина может заключаться в том, что вы используете @import (inline)
в своем main.less
, что приведет к тому, что импортируемый файл не будет обработан.
См. http://lesscss.org/features/#import-options