我最近学习了 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 更新并浏览它们。
换句话说,我想远程编码并./js/main.js
通过 ftp 更新,并让 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 传输完成后不应该触发“更改”事件吗?如果没有,至少不应该使用旧版本吗?
谢谢你。