我正在努力解决Gulp任务的问题。我无法弄清楚如何让它发挥作用。
让我首先展示我的项目结构:
project/
|
|-- Gulp/
| |-- Base/
| |-- start-server.js
| |-- sass.js
| ...
| |-- Watch/
| |-- watch-sass.js
| ...
| |-- config.js
| ...
|-- gulpfile.js
| ...
另外,让我展示一下这个结构中提到的每个文件的代码。 的 gulpfile.js
/*jslint node: true */
"use strict";
var requireDir = require('require-dir'); // Node module to require whole directories
// ***** Require all tasks from Gulp folder *****
requireDir('./Gulp', {
recurse: true
});
咕嘟咕嘟/的 config.js
module.exports = {
paths: {
Project: {
dir: './',
src: './www',
dist: './dist'
},
HTML: {
all: './www/Views/**/**/*.html',
dir: './www/Views',
entry: './www/Views/index.html'
},
Sass: {
all: './www/StyleSheets/Sass/**/**/*.scss',
dir: './www/StyleSheets/Sass',
entry: './www/StyleSheets/Sass/main.scss',
map: '../../../dist/maps/sass',
vendor: './www/StyleSheets/Sass/Vendor/**/*.scss'
},
CSS: {
all: './www/StyleSheets/CSS/**/**/*.css',
dir: './www/StyleSheets/CSS',
entry: './www/StyleSheets/CSS/main.css',
map: '../../../dist/maps/css',
vendor: './www/StyleSheets/CSS/Vendor/**/*.css'
},
JS: {
all: './www/JavaScripts/**/**/*.js',
dir: './www/JavaScripts',
entry: './www/JavaScripts/app.js',
map: '../../../dist/maps/js',
vendor: './www/JavaScripts/Vendor/**/*.js'
},
// ...
}
};
咕嘟咕嘟/碱/ 自动reload.js
var gulp = require('gulp'),
config = require('../config');
// ********* IMPORTS *********
var browserSync = require('browser-sync').create();
// ***END*** IMPORTS ***END***
// ***** Start server on localhost for live preview *****
gulp.task('start-server', function () {
browserSync.init({
server: {
baseDir: config.paths.Project.dir
},
open: true
});
});
咕嘟咕嘟/碱/的 sass.js
var gulp = require('gulp'),
config = require('../config');
// ********* IMPORTS *********
var sass = require('gulp-sass'),
browserSync = require('browser-sync'),
notify = require('gulp-notify'),
sourceMaps = require('gulp-sourcemaps');
// ***END*** IMPORTS ***END***
// ***** Sass compiler *****
gulp.task('sass', function () {
return gulp.src(config.paths.Sass.all)
.pipe(sourceMaps.init())
.pipe(sass({
style: 'compressed'
}))
.on("error", notify.onError(function (error) {
return "Error: " + error.message;
}))
.pipe(sourceMaps.write(config.paths.Sass.map))
.pipe(gulp.dest(config.paths.CSS.dir))
.pipe(browserSync.reload({
stream: true
}));
});
咕嘟咕嘟/观看/的手表sass.js
var gulp = require('gulp'),
config = require('../config');
// ********* IMPORTS *********
var browserSync = require('browser-sync'),
runSequence = require('run-sequence');
// ***END*** IMPORTS ***END***
// ***** Gulp watch Sass files *****
gulp.task('watch-sass', ['start-server'], function () {
gulp.watch(config.paths.Sass.all, ['sass', browserSync.reload]);
});
问题描述:
在最后一个文件Gulp / Watch / watch-sass.js 中的功能 browserSync.reload 不起作用。任务' watch-sass ',' start-server '然后' sass '正在运行,它会毫无问题地执行。但是在完成编译* .scss文件后使用browserSync.reload不会自动刷新页面,我无法弄清楚原因。有人可以帮帮我吗?
答案 0 :(得分:0)
我对gulp有点新意,但看起来你没有安装或导入gulp-watch。安装/导入它。
var watch = require("gulp-watch");
然后用手表替换gulp.watch:
// ***** Gulp watch Sass files *****
gulp.task('watch-sass', ['auto-reload'], function () {
watch(config.paths.Sass.all, ['sass'], function() {
browserSync.reload();
});
});
如果不是上述内容,也许您可以将您的代码与我在此处找到的gulp文件进行比较:https://github.com/FunkSoulNinja/travel-site
答案 1 :(得分:0)
我发现如果我把gulp任务和启动服务器'在' watch-sass.js '文件而不是将其分离到自己的文件,它可以工作。
watch-sass.js 的代码如下所示:
var gulp = require('gulp'),
config = require('../config');
// ********* IMPORTS *********
var browserSync = require('browser-sync').create(),
runSequence = require('run-sequence');
// ***END*** IMPORTS ***END***
// ***** Start server on localhost for live preview *****
gulp.task('start-server', function () {
browserSync.init({
server: {
baseDir: config.paths.Project.dir
},
open: true
});
});
// ***** Gulp watch Sass files *****
gulp.task('watch-sass', ['start-server'], function () {
gulp.watch(config.paths.Sass.all, function () {
runSequence(
'sass',
'useref-css',
'move-index',
browserSync.reload
);
});
});
browserSync.reload函数可以正常工作。至少在这个方法中。虽然我想要启动服务器'分隔文件中的任务,我不知道该怎么做。
所以,基于这种方法,我想为JS文件做类似的事情。我将任务命名为' watch-js.js '。代码几乎完全相同,只是runSequence中的不同配置路径和任务。 的手表js.js 强>
var gulp = require('gulp'),
config = require('../config');
// ********* IMPORTS *********
var browserSync = require('browser-sync').create(),
runSequence = require('run-sequence');
// ***END*** IMPORTS ***END***
// ***** Start server on localhost for live preview *****
gulp.task('start-server', function () {
browserSync.init({
server: {
baseDir: config.paths.Project.dir
},
open: true
});
});
// ***** Gulp watch JS files *****
gulp.task('watch-js', ['start-server'], function () {
gulp.watch(config.paths.JS.all, function () {
runSequence(
'useref-js',
'move-index',
browserSync.reload
);
});
});
Aaaand出人意料。运行此任务,使用相同的方法, browserSync.reload函数未被执行!我除了它的工作原理与watch-sass相同,它的工作原理。我现在真的迷失了,任何更有经验的人都可以帮助我,我正在做错什么?