mac cli javascript gulp

javascript - cli - install gulp windows



El evento de actualizaciĆ³n de Watchify nunca se dispara en Virtualbox (4)

Estoy intentando ponerme a trabajar con Gulp, pero parece que el evento de ''actualización'' nunca se dispara.

Aquí está mi gulpfile.js:

"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);

Sin embargo, cuando miro explícitamente los archivos sin verlo, funciona:

"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'']); });

He probado numerosos ejemplos, pero con watchify el paquete nunca se actualiza.

Estoy ejecutando Gulp dentro de una máquina virtual Vagrant, el host es OSX Yosemite, el invitado es Ubuntu 14.04.

¡Cualquier ayuda es muy apreciada!


Estaba teniendo el mismo problema y descubrí que no es que el evento de actualización de watchify nunca se dispare, es que no genera ninguna información de registro de forma predeterminada.

Si cambia su enlace de actualización a esto, creo que descubrirá que en realidad se está disparando:

// this is never fired! bundler.on(''update'', function () { console.log(''update event''); bundle(); });

Es por eso que en Gulp Starter construyeron un registrador personalizado para agrupar.

Actualización: Danny Moerkeke (OP) escribió: "Ya intenté esto para verificar que el manejador se haya disparado y no lo esté. ¡PERO su respuesta me envió en la dirección correcta porque cuando edito el archivo con vi directamente en la máquina virtual funciona! El espacio de trabajo está montado en una carpeta compartida dentro de vagrant y también ejecuto gulp dentro de esta máquina virtual. Cuando edito el archivo en mi editor en el host, el evento de actualización no se activa, así que aparentemente algo no funciona bien con las carpetas compartidas de vagrant. ejecutar trago en el host todo funciona bien. La idea era mantener todo dentro de la máquina virtual, pero en realidad esto está bien (¡y más rápido!) "


Esto se debe a que watchify basa en inotify para detectar cambios en los archivos, lo que funciona muy bien siempre que se inicien desde dentro de su máquina virtual (p. Ej., Al touch estos archivos). Sin embargo, no detectará los cambios realizados fuera debido a una limitación con VirtualBox que no activa los eventos apropiados en el sistema huésped cuando se cambia un archivo en el sistema host. Al parecer VMware sufre del mismo problema .

Actualmente hay algunas discusiones para recurrir al sondeo de montajes de red en watchify y chokidar (que watchify realmente usa para ver archivos) para aliviar este problema en particular:


La encuesta se añadió en 3.0.0.

Puedes activarlo con la opción de poll .

var w = watchify(b, { poll: true });

Desde docs: opts.poll permite el sondeo para monitorear los cambios. Si se establece en verdadero, se utiliza un intervalo de sondeo de 100 ms. Si se establece en un número, esa cantidad de milisegundos será el intervalo de sondeo. Para obtener más información, consulte la documentation de Chokidar sobre "usePolling" y "intervalo". Esta opción es útil si está viendo un volumen NFS.


Configurar el sistema de carpetas sincronizadas para RSync en el Vagrantfile solucionó mi problema.

Con esta función habilitada, cuando cambie los archivos en su editor en el host, se copiará sobre la marcha a través de RSync en el invitado y activará los eventos del observador en consecuencia.

Para hacerlo, simplemente agregue la siguiente configuración a su archivo:

Vagrant.configure("2") do |config| config.vm.synced_folder ".", "/vagrant", type: "rsync", end

En su terminal, inicie una sesión errante con el siguiente comando:

vagrant up && vagrant rsync-auto

http://docs.vagrantup.com/v2/synced-folders/rsync.html