Javascript gulp.watch()无法使用ftp更新
我最近学习了gulp,并在本地计算机上编写了这个gulp脚本,这样它就可以监视任何更改,并将我的javascripts(在本例中为Javascript gulp.watch()无法使用ftp更新,javascript,ftp,gulp,browserify,gulp-watch,Javascript,Ftp,Gulp,Browserify,Gulp Watch,我最近学习了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('gul
/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']);
它在我的本地计算机(Windows7)上运行良好,所以我试着把它放到我的远程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])
然后代码运行正常
我想问一下,为什么要等一段时间才能浏览。ftp传输完成后,gulp.watch()
不应该触发“更改”事件吗?如果不是,至少应该使用旧版本吗
谢谢。乍一看,我认为这种行为主要是由于
FTP协议的工作方式
事实上,在每种传输模式下,流
、块
或压缩
,并非所有数据都是一次性发送的。所有传输都被分割成小块数据,实际上是字节大小的8位。这就是FTP客户端
通过比较成功传输的数据包数
与要传输的文件的实际数据包数
来确定传输进度的方法
所有这一切都意味着,当您启动上传您的main.js
文件时,客户端开始传输数据(默认情况下,使用流
模式,正如其名称所示,一个字节的流
(嘿!就像吞下!),在大多数情况下,发送STOR
命令,在服务器上创建一个不存在的文件,或者替换其所有内容
由于每次文件更改时都会触发gulp
watcher
,因此即使文件未完成上载,成功传输数据包的一个勾号也可以启动任务。就像我说的,当文件已经存在于服务器上时,在传输数据之前,它的所有内容都会被清除,因此您的任务将以空文件或部分文件运行
您的超时时间
有助于等待文件上传完成,顺便说一句,1秒
暂时有效,但对我来说似乎有点短,特别是当您的连接不良或文件大小将要扩大时
您可以查看以了解更多详细信息,这是FTP协议的当前标准规范
我也遇到了同样的问题。我现在使用的不是GulpWatch,而是Python库。它监视一个目录中的文件更改,但它似乎不像gulp那样有FTP上传的问题
我已经删除了gulpfile的watch部分,现在使用以下命令运行“watch”部分:
when-changed -r /var/www/website/css/internal /var/www/website/js/internal -c gulp
when-changed -r /var/www/website/css/internal /var/www/website/js/internal -c gulp