requerimientos nodejs node home espaƱol node.js gulp del

node.js - nodejs - npm node js



El comando del nodo-devoluciĆ³n de llamada no disparando (3)

A partir de la versión 2.0 , la API de del cambió para usar promesas.

Por lo tanto, para especificar la devolución de llamada debe usar .then ():

del(''unicorn.png'').then(callback);

En caso de que necesite llamarlo desde una tarea sencilla, simplemente devuelva una promesa de la tarea:

gulp.task(''clean'', function () { return del(''unicorn.png''); });

Estoy trabajando a través de un curso de pluralsight en gulp. John Papa está demostrando cómo inyectar una función que elimina archivos css existentes en la rutina que compila los nuevos.

La devolución de llamada en la función del no está disparando. La función del se está ejecutando, el archivo se elimina, no veo ningún mensaje de error. Si llamo a la devolución de llamada manualmente, se ejecuta, por lo que parece que la función está intacta. Así que me pregunto qué causaría que no se quiera ejecutar la devolución de llamada.

eliminar rutina:

function clean(path, done) { log(''cleaning '' + path); del(path, done); // problem call }

La función ''hecho'' no se está activando, pero sí si cambio el código a esto:

function clean(path, done) { log(''cleaning '' + path); del(path); done(); }

Lo que, por supuesto, anula el propósito previsto de esperar hasta que se termine el proceso antes de continuar.

Cualquier idea sobre lo que está pasando sería apreciada.

Para referencia (en caso pertinente):

compilar la función css:

gulp.task(''styles'', [''clean-styles''], function(){ log(''compiling less''); return gulp .src(config.less) .pipe($.less()) .pipe($.autoprefixer({browsers:[''last 2 versions'', ''> 5%'']})) .pipe(gulp.dest(config.temp)); });

Función de limpieza inyectada:

gulp.task(''clean-styles'', function(done){ var files = config.temp + ''/**/*.css''; clean(files, done); });

ACTUALIZAR

Si alguien más se encuentra con esto, vuelve a ver el video de entrenamiento y estaba usando v1.1 de del. Lo comprobé y estaba usando 2.x. Después de instalar v 1.1 todo funciona.


Al revisar los documentos para el paquete del paquete , parece que se está mezclando entre el mecanismo de devolución de llamada estándar del nodo y el de, que está utilizando una promesa.

Querrá usar la API de promesa, con .then (hecho) para ejecutar el parámetro de devolución de llamada.

Node y javascript en general se encuentran actualmente en un estado de flujo para los patrones de diseño para manejar el código asíncrono, con la mayoría de la comunidad del navegador y la gente de estándares inclinados hacia las promesas, mientras que la comunidad Node tiende hacia el estilo de devolución de llamada y una biblioteca como asíncrono.

Con las promesas de estandarización de ES6, sospecho que vamos a ver más de este tipo de incompatibilidades en los nodos, ya que las personas que sienten pasión por la API comienzan a incorporar cada vez más en el código de nodos.


del no es un comando de Node, probablemente sea this paquete npm. Si ese es el caso, no recibe una devolución de llamada como segundo parámetro, en su lugar devuelve una promesa y debe llamar a .then(done) para que se le llame después de que termine el .then(done) .

Actualizar

Una mejor solución es abrazar la naturaleza de la promesa de Gulp:

Cambie su función de clean a:

function clean(path) { return del(path); // returns a promise }

Y tu tarea de clean-styles para:

gulp.task(''clean-styles'', function(){ var files = config.temp + ''/**/*.css''; return clean(files); });