首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Watchify更新事件从不在Virtualbox中触发

Watchify更新事件从不在Virtualbox中触发
EN

Stack Overflow用户
提问于 2014-12-23 19:15:30
回答 4查看 5.4K关注 0票数 18

我正在尝试让watchify与Gulp一起工作,但似乎'update‘事件从未触发过。

这是我的gulpfile.js:

代码语言:javascript
复制
"use strict";

var gulp = require('gulp');
var browserify = require('browserify');
var source = require("vinyl-source-stream");
var watchify = require('watchify');

var bundler = watchify(browserify({entries: ['./client/app/app.js'], cache: {}, packageCache: {}, fullPaths: true}));

gulp.task('js', bundle); 

function bundle() {
    console.log('bundle');
    return bundler.bundle()
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./dist'));
}

// this is never fired!
bundler.on('update', bundle);

但是,当我显式地查看文件而不使用watchify时,它可以正常工作:

代码语言:javascript
复制
"use strict";

var gulp = require('gulp');
var browserify = require('browserify');
var source = require("vinyl-source-stream");
var watchify = require('watchify');

function bundle() {
    console.log('bundle');
    return browserify('./client/app/app.js')
    .bundle()
    .pipe(source('bundle.js'))
    .pipe(gulp.dest('./dist/'));
}

gulp.task('browserify', bundle);

gulp.task('js', function() {
    bundle();
    gulp.watch(['client/**/*.js'], ['browserify']);
});

我尝试过许多示例,但使用watchify时,包永远不会更新。

我在Vagrant VM中运行Gulp,主机是OSX Yosemite,客户是Ubuntu 14.04。

任何帮助都是非常感谢的!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-05 23:49:54

我也遇到了同样的问题,我发现问题并不是watchify update事件永远不会触发,而是默认情况下它不会输出任何日志记录信息。

如果您将更新绑定更改为此,我想您会发现它实际上正在触发:

代码语言:javascript
复制
// this is never fired!
bundler.on('update', function () {
    console.log('update event');
    bundle();
});

这就是为什么在gulp starter中他们构建了一个用于捆绑的custom logger

更新: Danny (OP)写道:“我已经尝试过了,以验证处理程序是否已被解雇。但是你的回答给了我正确的方向,因为当我直接在虚拟机中使用vi编辑文件时,它是有效的!工作区被挂载到vagrant中的一个共享文件夹中,我也在这个VM中运行gulp。当我在主机上的编辑器中编辑文件时,update事件没有被触发,所以显然这里的某些东西不能很好地处理漫游共享文件夹。当我在主机上运行吞咽时,一切工作正常。我们的想法是将所有内容都保留在VM中,但实际上这很好(而且更快!)

票数 10
EN

Stack Overflow用户

发布于 2015-06-10 05:55:18

Polling was added in 3.0.0.

您可以使用poll选项激活它。

代码语言:javascript
复制
var w = watchify(b, {
  poll: true
});

来自文档的 opts.poll启用轮询来监视更改。如果设置为true,则使用100ms的轮询间隔。如果设置为一个数字,则毫秒数将是轮询间隔。有关更多信息,请参阅Chokidar关于"usePolling“和"interval”的documentation。如果您正在查看NFS卷,则此选项非常有用。

票数 24
EN

Stack Overflow用户

发布于 2015-03-19 18:05:17

这是因为watchify依赖inotify来检测文件更改,只要这些更改是从虚拟机内部启动的(例如,在这些文件上使用touch ),它就会工作得很好。但是,它不会获取在外部执行的更改,因为当主机系统中的文件发生更改时,limitation with VirtualBox不会在来宾系统中触发相应的事件。显然,VMware患有same problem

目前有一些讨论可以退回到watchifychokidar ( watchify实际上用来监视文件)中的网络挂载轮询,以缓解这个特定的问题:

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27619248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档