【问题标题】:Making a gulpfile: getting an error when call gulp.parallel制作 gulpfile:调用 gulp.parallel 时出错
【发布时间】:2015-03-23 17:27:23
【问题描述】:

我正在阅读Gulp 入门一书(于 2015 年 1 月出版),但我意识到,由于 Gulp 的开发速度非常快,它可能已经有点过时了。

这是我的 gulpfile:

// Modules & Plugins
var gulp = require('gulp');
var concat = require('gulp-concat');
var myth = require('gulp-myth');
var uglify = require('gulp-uglify'); // newly added
var jshint = require('gulp-jshint'); // newly added
var imagemin = require('gulp-imagemin');
// let's add two node.js modules:
var connect = require('connect');
// var serve = require('serve-static');
var browsersync = require('browser-sync');
var browserify = require('browserify');
var source = require('vinyl-source-stream');
var plumber = require('gulp-plumber');

// Tasks
// styles task
gulp.task('styles', function(){
    return gulp.src('app/css/*.css')
    // now we add our pipes:
        .pipe(plumber())
        .pipe(concat('all.css'))
        .pipe(myth())
        .pipe(gulp.dest('dist'));
});

// scripts task
gulp.task('scripts', function() {
    return gulp.src('app/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('all.js'))
        .pipe(uglify())
        .pipe(gulp.dest('dist'));
});

// images task
gulp.task('images', function() {
    return gulp.src('app/img/*')
      .pipe(imagemin())
      .pipe(gulp.dest('dist/img'));
});

// browsersync Task:
gulp.task('browsersync', function(cb) {
    return browsersync({
      server: {
        baseDir:'./'
      }
    }, cb);
});

// browserify Task:
gulp.task('browserify', function() {
    return browserify('./app/js/app.js')
      .bundle()
      .pipe(source('bundle.js'))
      .pipe(gulp.dest('dist'));
});

// watch task:
gulp.task('watch', function() {
  gulp.watch('app/css/*.css',
   gulp.series('styles', browsersync.reload));
  gulp.watch('app/js/*.js',
   gulp.series('scripts', browsersync.reload));
  gulp.watch('app/img/*',
   gulp.series('images', browsersync.reload));
});

// Default Task
gulp.task('default', ['styles', 'scripts', 'images', 'browsersync', 'browserify', 'watch']);

编辑:更改最后的gulp.task 行后,它运行但我仍然收到以下错误:

[13:51:21] Starting 'watch'...
[13:51:21] 'watch' errored after 146 μs
[13:51:21] TypeError: undefined is not a function
    at Gulp.<anonymous> (/Volumes/BigMan/Code/javascript/gulp-book/gulpfile.js:79:9)
    at module.exports (/Volumes/BigMan/Code/javascript/gulp-book/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:34:7)
    at Gulp.Orchestrator._runTask (/Volumes/BigMan/Code/javascript/gulp-book/node_modules/gulp/node_modules/orchestrator/index.js:273:3)
    at Gulp.Orchestrator._runStep (/Volumes/BigMan/Code/javascript/gulp-book/node_modules/gulp/node_modules/orchestrator/index.js:214:10)
    at Gulp.Orchestrator.start (/Volumes/BigMan/Code/javascript/gulp-book/node_modules/gulp/node_modules/orchestrator/index.js:134:8)
    at /usr/local/lib/node_modules/gulp/bin/gulp.js:129:20
    at process._tickCallback (node.js:355:11)
    at Function.Module.runMain (module.js:503:11)
    at startup (node.js:129:16)
    at node.js:814:3

【问题讨论】:

  • 什么版本的 gulp?
  • 版本是3.8.11

标签: javascript node.js gulp


【解决方案1】:

我正在阅读同一本书,发现它不起作用。我注意到您所要做的就是将 Gulp 更新到 4.0

为什么不工作

为了实现 Gulp 的并行和串行功能,您必须安装 Gulp 4.0

如何安装

全局安装

npm uninstall gulp -g
npm install gulpjs/gulp-cli#4.0 -g

yarn global add gulpjs/gulp.git#4.0

在您的项目中

npm uninstall gulp
npm install gulpjs/gulp.git#4.0 --save-dev

yarn add gulpjs/gulp.git#4.0

我还发现了一堆关于 Gulp 4.0 新功能的教程

我假设这是因为本书在编写时考虑了即将推出的功能。我认为有时不能假设该项目会进展得那么快。我仍然不明白gulp.parallel 和只是传递一个数组之间的区别。

http://fettblog.eu/gulp-4-parallel-and-series/

还有一件事:

在 gulp4 中,您必须为监视任务指定并行/系列:

gulp.task('watch', function() {
    gulp.watch('app/css/*.css', gulp.parallel('styles'));
    gulp.watch('app/jss/*.js', gulp.parallel('scripts'));
    gulp.watch('app/img/*', gulp.parallel('images'));
})

【讨论】:

  • 有趣。这是 3.x 到 4.0 版本的 migration guide,您可以在其中阅读更多关于 parallel 用法的信息。
  • gulp-cli 没有 4.0 版本,gulp 有。我们只需要升级 gulp。其余的评论是准确的。
  • 我不确定 cmets 或请求中是否有任何 gulp-cli 引用,除了 gulpjs 的 npm 安装。您的评论可能会让其他试图弄清楚这一点的人感到困惑。出于某种原因,在撰写本文时 gulpjs/gulp-cli#4.0 帮助安装了正确的版本。
【解决方案2】:

我不确定 gulp.parallel 或 gulp.series 是从哪里来的,但您应该可以通过将代码更改为此来完成同样的事情:

// watch task:
gulp.task('watch', function() {
    gulp.watch('app/css/*.css', ['styles', browsersync.reload]);
    gulp.watch('app/js/*.js', ['scripts', browsersync.reload]);
    gulp.watch('app/img/*', ['images', browsersync.reload]);
});

gulp.task('default', ['styles', 'scripts', 'images', 'browsersync', 'browserify', 'watch']);

据我所知 .series 和 .parallel 不存在。一旦我进行了这些更新,它就可以工作了。

如果您需要连续运行任务,我很幸运地使用了这个模块:https://github.com/OverZealous/run-sequence。您可以将监视任务更改为:

var runSequence = require('run-sequence');

// watch task:
gulp.task('watch', function() {
  gulp.watch('app/css/*.css', runSequence('styles', browsersync.reload));
  gulp.watch('app/js/*.js', runSequence('scripts', browsersync.reload));
  gulp.watch('app/img/*', runSequence('images', browsersync.reload));
});

【讨论】:

  • 我更改了代码,当 gulp 运行时,它现在给了我更新问题中的错误。
  • 谢谢。我是 Gulp 的新手(一般是 node.js),我真的需要花一些时间在流上
  • .series 和 .parellel 在 Gulp 版本 4 中。它们将使运行序列过时。
  • 一年半过去了,npm 上仍然没有 Gulp 4 的迹象。
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多