【发布时间】:2014-07-27 09:52:52
【问题描述】:
我最近学习了 gulp,并在我的本地计算机上编写了这个 gulp 脚本,以便它可以监视任何更改,并将我的 javascripts(在本例中为 ./js/main.js 及其依赖项)编译成单个文件 ./js/bundle.js :
var gulp = require('gulp');
// Plugins
var jshint = require('gulp-jshint');
var browserify = require('gulp-browserify');
var rename = require('gulp-rename');
// Lint Task
gulp.task('lint', function() {
return gulp.src(['./js/**/*.js', '!./js/bundle.js'])
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
// browserify task
gulp.task('b', function() {
gulp.src('js/main.js')
.pipe(browserify())
.pipe(rename('bundle.js'))
.pipe(gulp.dest('js/'));
});
// Watch Files For Changes
gulp.task('watch', function() {
gulp.watch(['./js/*.js', './js/**/*.js', '!./js/bundle.js'], ['lint', 'b'])
.on('change', function(event) {
console.log("\n============");
console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
});
// Default Task
gulp.task('default', ['lint', 'watch']);
它在我的本地计算机 (Windows 7) 上运行良好,所以我尝试将它放到我的远程 Ubuntu 服务器上,让它监视任何 ftp 更新并浏览它们。
换句话说,我想远程编码并通过 ftp 更新./js/main.js,并让 gulp 监视更改并自动浏览它。
问题是:Gulp 识别出更改并登录控制台:
File /home/wordpress/public_html/cm/mobileCoder02/src/js/main.js was changed, running tasks...
[09:27:47] Starting 'lint'...
[09:27:47] Starting 'b'...
[09:27:47] Finished 'b' after 34 μs
[09:27:47] Finished 'lint' after 6.71 ms
但输出文件 bundle.js 只包含模块加载器脚本:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
},{}]},{},[1])
如果我将任务更改为
// browserify task
gulp.task('b', function() {
setTimeout(function() {
gulp.src('js/main.js')
.pipe(browserify())
.pipe(rename('bundle.js'))
.pipe(gulp.dest('js/'));
}, 1000);
});
然后代码运行正常。
我想问一下为什么浏览器需要等待一段时间。 gulp.watch() 不应该在 ftp 传输完成后触发“更改”事件吗?如果不是,至少应该使用旧版本吧?
谢谢。
【问题讨论】:
标签: javascript ftp gulp browserify gulp-watch