Gulp 4 - Gulpfile.js 设置

8
我发现很难找到Gulp 4的文档,所以想在这里问问是否有人能够帮助。我对Gulp还比较陌生,在没有问题的情况下一直使用Gulp 3,直到我尝试在我们用于开发的虚拟机上运行它。我的gulp文件非常简单,我只是使用gulp-sass将SASS编译为CSS文件,这一直有效,但每次保存css文件时,它都会更改文件的写入权限,浏览器无法读取该文件!因此,我进行了一些研究,显然这是Gulp 3的问题,现在已在Gulp 4中得到解决,请参见-https://github.com/gulpjs/gulp/issues/1012。所以我想尝试Gulp 4,因此按照这里的说明进行了更新-http://www.ociweb.com/resources/publications/sett/gulp-4/,但我在设置实际gulpfile.js时遇到了真正的问题,因为我找不到任何文档。目前我拼凑出来的代码如下,但没有成功...不幸的是,我的JS技能欠缺!这里有一个Gulp 4示例文件-https://gist.github.com/demisx/beef93591edc1521330a。我需要gulpfile使用gulp-sass编译sass。
// include gulp
var gulp = require('gulp');

// include plugins
var sass = require('gulp-sass');


var paths = {
  dirs: {
    build: './furniture/css'
  },
  sass: './furniture/sass/**/*.scss'
};


// Shared tasks
gulp.task('glob', function () {
  var pattern = '.build/**/*.css';

  gulp.src(pattern, { read:false })
    .pipe(using());
});

// SASS

gulp.task('sass', function () {
  return gulp.src(paths.sass)
    .pipe(sass())
    .pipe(changed(paths.dirs.build))
    .pipe(gulp.dest(paths.dirs.build))
    .pipe(grep('./furniture/css', { read: false, dot: true }))
});

gulp.task('watch:styles', function () {
  gulp.watch(paths.sass, 'sass');
});

// Default task
gulp.task('default'('build', 'ws', 'watch'));
1个回答

32

如果你遇到了错误,我们可能需要更多信息。但是,如果问题仅在于让gulpfile.js正常工作,那么下面的内容应该可以解决问题。

如果你已经找到解决方法,那太好了。但是对于其他遇到这个问题的人,我将提供一些技巧,然后这个方法应该可以解决问题。

目录

  • 第一步:卸载gulp 3并安装gulp 4
    • 我将提供安装和卸载指南,以便使用gulp 4。
  • 第二步:测试gulp 4是否有效
    • 我将为您提供最基本的版本,如果可行,则可以进行下一步操作。
  • 第三步:最终的gulpfile版本
    • 尝试我根据您向我展示的文件需求所提供的第二个版本。
  • 最后:有关Gulp 4和当前gulp 4版本的一些注意事项
    1. 根据您展示的gulpfile,以下是关于Gulp 4的一些要点,
    2. 以及当前gulp 4构建0.4.0的快速修复方法。

第一步:卸载gulp 3并安装gulp 4

如果您尚未从系统中删除gulp,请务必这样做。如果已将其添加为项目依赖项,则必须将其删除。

npm uninstall -g gulp
cd {your-project-dir}
npm uninstall gulp

接下来,您必须将 gulp 4 全局安装并作为项目的依赖项安装。

npm install -g gulpjs/gulp-cli#4.0

在你的项目中:

npm install --save-dev gulpjs/gulp-cli#4.0

重要提示

现在是gulpjs/gulp#4.0版本(使用gulp而非gulp-cli


第二步:测试gulp 4是否可行

你的gulpfile基本版本:
注意:如果你复制粘贴,请更改gulp.src(...).pipe(gulp.dest(...))路径。

// =========================================================
// gulpfile.js
// =========================================================
var gulp        = require('gulp'),
    sass        = require('gulp-sass');

// ---------------------------------------------- Gulp Tasks
gulp.task('sass', function(){
    return gulp.src("path/to/sass-file.scss")
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest("path/to/css-destination.css"))
});

// --------------------------------------- Default Gulp Task
gulp.task('default', function(){
    console.log("It's working!");
});

让我们找出gulp 4是否正常工作:

  1. 在终端中运行默认的gulp任务:

    gulp

    • 如果你在终端中看到:It's working!,那么说明gulp 4已经正确安装。
    • 如果你看到“ It's working! ”但也有一些错误,那么你需要解决这些问题,但问题应该与您的gulpfile.js文件有关。(如果发布后一段时间已过,请参阅更多最近的安装/卸载说明和更多最近的gulp 4教程)。
    • 如果只看到错误(而没有出现“ It's working! ”),则很可能是gulp 4未正确安装,或者gulp 3未正确删除,你应该卸载gulp 3和4并重新安装gulp 4。 注意: 如果你尝试了许多不同来源的安装说明,则特别容易发生这种情况。
  2. 如果成功了,那么:

    • 让我们备份Sass为您以前创建的CSS文件(如果已存在项目),然后删除这些CSS文件,然后
    • 接下来在终端中尝试运行sass任务:

    gulp sass

如果它起作用了(创建了这些文件),那么一切正常,请继续查看下面的其他片段。


第三步:最终gulpfile版本

这是根据所示gulpfile.js的需求解决方案:

// =========================================================
// gulpfile.js
// =========================================================
// ------------------------------------------------ requires
var gulp = require('gulp'),
    sass = require('gulp-sass');

// ------------------------------------------------- configs
var paths = {
  sass: {
    src: './furniture/sass/**/*.{scss,sass}',
    dest: './furniture/css',
    opts: {

    }
  }
};

// ---------------------------------------------- Gulp Tasks
gulp.task('sass', function () {
  return gulp.src(paths.sass.src)
    .pipe(sass().on('error', sass.logError))
    .pipe(gulp.dest(paths.sass.dest))
});

// ------------------------------------ Gulp Testing Message
gulp.task('message', function(){
  console.log('It works!!');
});

// ---------------------------------------------- Gulp Watch
gulp.task('watch:styles', function () {
  gulp.watch(paths.sass.src, gulp.series('sass'));
});

gulp.task('watch', gulp.series('sass',
  gulp.parallel('watch:styles')
));


// -------------------------------------------- Default task
gulp.task('default', gulp.series('sass', 
  gulp.parallel('message', 'watch')
));

虽然我说这是最终版本,但我在gulpfile中留下了可选的message任务,以展示gulp.seriesgulp.parallel的工作原理。我在下面的最后一节简要介绍了它们。 这不是必要的,可以删除。

您可能还注意到我添加了一个包含以下内容的观察任务:
gulp.series('sass',gulp.parallel('watch:styles')) 这样您可以在将来添加其他watch:任务。例如watch:scripts

gulp.series('sass'...)部分纯粹是为方便起见。如果您编写了一些代码,然后运行gulp任务,您需要再次修改它才能反映您的更改。在运行观察任务之前先添加'sass',它会在开始监视更改之前进行转译。


最后:关于Gulp 4和当前的Gulp 4构建的一些说明

1. 基于您展示的gulpfile,这里提供有关Gulp 4的一些指南

Gulp 4现在使用:

  • gulp.series:控制要运行的顺序。按顺序运行任务直到完成,例如:
    gulp.series('task-name-1', 'task-name-2')
  • gulp.parallel:与gulp 3以前一样同时运行任务,例如:
    gulp.parallel('task-name-3', 'task-name-4')
  • seriesparallel可以一起使用来更好地控制任务的流程,例如:

    gulp.task('example', 
      gulp.series('thisTaskIsRunFirst', 'thisSecond',
        gulp.parallel('theseThird-SameTime-1', 'theseThird-SameTime-2')
    ));  
    

2. Gulp 4构建的快速修复方法

在这些示例中,您会注意到我在watch:styles任务中使用了gulp.series

    // ---------------------------------------------- Gulp Watch
    gulp.task('watch:styles', function () {
      gulp.watch(paths.sass, gulp.series('sass'));
    });

这可能是由于gulp 4的watch方法中存在的一个bug导致的。我假设是这种情况,因为我无法仅使用'sass'来使监视任务正常工作,而必须使用gulp.series('sass')
我说“可能是”一个bug,因为在学习gulp 4时,其他人在他们的gulp 4示例中已经使用了传统的监视任务格式:

gulp.task('watch', function(){
  gulp.watch('path/of/files/to/watch/**/*.scss', 'sass');
});

我不得不想出这个解决方法才能使用gulp watch。这没问题,并且如果您希望在此之后执行其他任务,也可以提供其他好处。

一旦我完成它们的编写,我将回来提供有关Gulp 4的一些教程链接。


哇,感谢Tristan提供如此深入的回复。有很多东西需要去仔细阅读,等我把它消化一下再回报。 - Andy
没问题,告诉我进展如何。 - Tristan Isfeld
你有关于在发布之前升级Gulp 4的指南吗?(不是从v3而是从4.0开始) - Lance
增加一个关于Gulp 4的相关内容,供那些需要的人参考:https://dev59.com/pFoU5IYBdhLWcg3w9aWi#36899424 - SJL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接