【问题标题】:Gulp 4 - Gulpfile.js set upGulp 4 - Gulpfile.js 设置
【发布时间】:2015-09-09 09:16:18
【问题描述】:

我很难找到有关 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'));

【问题讨论】:

    标签: gulp gulp-sass


    【解决方案1】:

    好吧,我们可能需要更多关于您遇到的错误的信息。但是,如果问题只是让您的 gulpfile.js 正常工作,这应该可以工作。

    如果您已经找到了解决方案,那就太好了。但是对于遇到这种情况的其他人,我会给出一些提示,然后这应该会起作用。

    索引

    • 首先:卸载 gulp 3 并安装 gulp 4
      • 我将提供安装和卸载说明以便使用 gulp 4。
    • 第二:测试 gulp 4 是否有效
      • 我会给你一个最基本的版本来试试,如果可行,那么,
    • 第三:最终的 gulpfile 版本
      • 根据您向我展示的文件尝试我为您提到的需求提供的第二个版本。
    • 最后:关于 Gulp 4 和当前 gulp 4 构建的一些说明
      1. 根据您显示的 gulpfile,这里有一些关于 Gulp 4 的指针,
      2. 以及对当前 gulp 4 build 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.0gulp 而不是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 已正确安装。
      • 如果您看到“它正在工作!”还有一些错误,那么您需要解决这些错误,但问题应该出在您的 gulpfile.js 文件上。 (如果自发布以来已经过了一段时间,请参阅更新的安装/卸载说明和更新的 gulp 4 教程)。
      • 如果您只是看到错误(并且根本没有出现“它正在工作!”),那么可能是 gulp 4 没有正确安装,或者 gulp 3 没有正确删除,您应该同时卸载 gulp 3 和 4并重新安装 gulp 4。注意:如果您尝试了各种来源的各种安装说明,则尤其可能出现这种情况。
    2. 如果成功了,那么:

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

      gulp sass

    如果它有效(创建了这些文件),那么一切正常并继续我下面的其他 sn-ps。


    第三:最终的 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')
    • seiresparallel 可以一起使用以更好地控制任务的流程,例如:

      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 方法中的一个错误。我假设是这种情况,因为我无法通过简单地使用 'sass' 来让监视任务工作,而不得不使用 gulp.series('sass')
    我说这大概是一个错误,因为在我自己学习 gulp 4 时,其他人一直在使用传统的 watch 任务格式和他们的 gulp 4 示例:

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

    为了使用 gulp watch,我不得不想出这个办法。这很好,如果您愿意,还可以提供执行其他一些任务的其他好处。

    写完后我会回来提供一些 Gulp 4 的教程链接。

    【讨论】:

    • 哇,感谢 Tristan 如此深入的回复。. 那里有很多事情要做,所以我有时间消化后会回来报告。
    • 没问题,告诉我进展如何。
    • 你有在发布之前升级 Gulp 4 的说明吗? (不是从 v3 开始,而是从 4.​​0 开始)
    • 添加另一个与 Gulp 4 相关的内容,给那些过来的人:https://stackoverflow.com/a/36899424/3676036
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多