Gulp 4 - Gulpfile.js 设置

2023-11-23

我发现有关 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'));

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

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

Index

  • First: Uninstalling gulp 3 and installing gulp 4
    • 我将提供安装和卸载说明,以便使用 gulp 4。
  • Second: Testing to see if gulp 4 works
    • 我将给你一个最基本的版本来尝试,如果可行的话,
  • Third: The final gulpfile version
    • 尝试我根据您向我展示的文件提供的第二个版本,以满足您提到的需求。
  • Finally: Some notes on Gulp 4 and current gulp 4 build
    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.0 (gulp代替gulp-cli)


第二:测试 gulp 4 是否有效

gulpfile 的基本版本:
NOTE:如果要复制和粘贴,请更改 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.NOTE:如果您尝试了来自不同来源的各种安装说明,这种情况尤其可能发生。
  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')
));

虽然我说这是最终版本,但我留下了可选的messagegulpfile 中的任务,以便显示gulp.series and gulp.parallel在上班。我将在下面的最后一节中简要介绍它们。 这是没有必要的,可以删除。

您可能还注意到我添加了一个监视任务,其中包含:
gulp.series('sass', gulp.parallel('watch:styles'))这样您就可以在将来添加额外的watch:任务。例如watch:scripts.

The 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')
  • seires and parallel可以一起使用以更好地控制任务流程,例如:

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

2. 以及当前 gulp 4 版本的快速修复

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

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

这可能是由于 gulp 4 watch 方法中的错误造成的。我假设是这种情况,因为我无法通过简单地使用来使监视任务正常工作'sass'而不得不使用gulp.series('sass').
我说这大概是一个错误,因为当我自己学习 gulp 4 时,其他人一直在使用传统的监视任务格式及其 gulp 4 示例:

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

为了使用 gulp watch,我必须想出这个解决办法。这很好,如果您愿意的话,还可以提供执行其他任务的其他好处。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gulp 4 - Gulpfile.js 设置 的相关文章

  • gulp - 在没有“require”的情况下编译 Vue 组件

    我试图了解如何使用 Gulp 构建组件 此时 我有一个如下所示的 Vue 组件 我的组件 vue
  • TinyMCE gulp 配置

    我正在构建一个 Web 应用程序 我想使用 TinyMCE 我正在使用 gulp 和 browserify 我已经通过 npm 下载了 TinyMCE 并且在我的 app js 文件中需要它并运行gulp命令但我收到此错误Failed to
  • 使用 gulp 创建 tar 档案

    我正在使用 gulp tar 创建一个 tar 文件 如何添加顶级文件夹 以便当用户运行时tar xzf myArchive tar它解压到特定的文件夹中 这是我的代码 gulp task prod min gittag function
  • 在 Gulp 任务中获取相对源/目标

    假设我有一个文件 Users me app src scripts foo js 我设置了一个 gulp 任务 将该文件写入 Users me app dist scripts foo js gulp src src scripts foo
  • npm install 缺少模块

    在我能跑之前gulp在我的项目中我需要运行npm install 除了在我的计算机上之外 这都有效 因为我收到以下错误 Error Cannot find module socket io at Function Module resolv
  • Gulp 伊斯坦布尔完整覆盖报告

    我正在使用 gulp istanbul 通过 Gulp 生成 JavaScript 单元测试覆盖率报告 有没有办法配置 Istanbul 以生成我的 gulp 流中所有 JS 文件的完整覆盖率报告 而不仅仅是测试用例涉及的文件 我正在开发一
  • 改进PNG优化Gulp任务

    这是透明的 PNG 源代码 https i stack imgur com 6XZBB png https i stack imgur com 6XZBB png 13 3kB 使用 compresspng com 进行优化 https i
  • Gulp:无依赖的同步性

    我正在将构建系统迁移到 gulp 并且遇到了一个问题 我定义了各种构建任务 scripts style jade等 以及clean删除所有构建文件的任务 我想确保构建任务不会在清理任务之前运行 BUT我还希望能够在不先清理的情况下运行构建任
  • 在 `gulp.src` 中使用 glob 排除 gulp 中的目录模式

    我正在尝试使用 glob 所有文件目录gulp src 除了所有以字符开头的目录 i e Stuff 我怎样才能做到这一点 假设你有一个文件夹project src包含以下文件 file txt folder folder file txt
  • Gulp - 处理多个主题和文件夹

    我正在努力创造一个终极gulpfile我们可以在我们的大型网站之一上使用它 一个具有多个主题 具体取决于您所在网站的部分 我试图让它只运行它需要运行的进程 而不是重新编译所有内容 让我准确地布局我想要实现的目标 文件夹结构 src mast
  • 如何使用 Visual Studio 的 Node Tools 调试 Gulp 任务?

    我最近安装了适用于 Visual Studio 的 NodeJS 工具 https github com Microsoft nodejstools其中宣称支持 VS 中的 Node 环境 值得注意的是 它能够从 IDE 设置调试断点 我不
  • Gulp-autoprefixer 抛出 ReferenceError: Promise 未定义

    我尝试让 gulp 编译我的 sass 然后使用 autoprefixitgulp autoprefixer但我收到错误 var gulp require gulp sass require gulp sass autoprefixer r
  • 调试变量不适用于 gulp sourcemaps + uglify

    我有以下用于捆绑 javascript 的 gulp 任务 gulp task js function return gulp src paths js pipe sourcemaps init pipe uglify pipe conca
  • gulp compass 创建一个不需要的文件而不是仅使用流

    这是我的应用程序指南针吞咽任务 var compass require gulp compass var autoprefixer require gulp autoprefixer gulp task app compass functi
  • gulp-sass 可以解决 load_path 支持吗?

    问题 我正在使用 gulp sass 并想定义一个 load path 这样我就不必有很长的 import 规则 voor Bower 依赖项 例如 import normalize 代替 import bower components b
  • 在 package.json 中声明时 Reactify 转换未运行

    我正在尝试将reactify 转换与browserify 和gulp 结合使用 这个 gulp 任务有效 return browserify paths node modules app scripts entries app script
  • 电子应用程序的实时重新加载

    我想使用 VScode Gulp Electron 的组合来构建一个应用程序 开发工作流程的一个不错的功能是向我的 Gulp 监视任务添加实时重新加载任务 以便在每次更改时重新加载 Electron 应用程序 任何想法如何实现这一目标 非常
  • 保存到服务器后,隐藏字符“\u0”添加到文件中

    我正在使用 Apache 服务器为 Web 开发网站提供服务 这样我就可以不断保存和编辑文件 我使用 Gulp for Sass 来连接和丑化 css 和 js 文件 一个月前 我的 js 和 css 文件遇到问题 似乎在文件下面添加了随机
  • 有没有等效的 gulp 插件来执行“grunt Bower”?

    With grunt 我可以使用命令grunt bower 由 提供grunt bower requirejs https github com ck86 gulp bower files 自动生成RequireJS我本地的配置文件bowe
  • 永远运行 Gulp 脚本?

    是否可以运行 Gulp 脚本forever https www npmjs com package forever 我有 Gulp 脚本想要作为守护进程运行 所以我可以启动 停止 列出它 好的 所以我通过将 gulp 二进制文件从 usr

随机推荐

  • Spring Boot 中 Thymeleaf 的几个模板位置

    现在Spring Boot允许一个值Thymeleaf模板位置与spring thymeleaf prefix财产 默认值为classpath templates 我想要为 thymeleaf 模板设置另一个位置 但保留默认位置 在 jar
  • 从套接字描述符恢复 IP/端口

    我在写inetd 的克隆我必须运行一个服务器来打印连接到它的客户端的 IP 和端口 当我覆盖时STDIN and STDOUT使用套接字描述符 我最初的解决方案这样做是为了恢复sockaddr in结构 其中包含所需的信息 这样做与gets
  • CSS“inner-html”技术? [复制]

    这个问题在这里已经有答案了 我想知道是否有一种方法可以根据元素包含的单词来查询元素 所以 如果我有 div h1 Home h1 div 我想要任何 globalPageHeader h1有这个词Home在其中 有一个display的财产n
  • 如何配置多个格式化程序以在 VSCode 中保存时按顺序运行?

    我正在开发一个 Haskell 项目 该项目的格式必须为both stylish haskell 用于进口重新订购 brittany 用于一般格式 我可以为一种语言设置单一默认格式化程序 haskell editor defaultForm
  • 如何在 Windows 上使用 SSH 详细模式运行 git 命令?

    这是 Windows 版本如何使用 SSH 详细模式运行 git push pull 命令 有时您只需要调试 git 对 SSH 的使用 OpenSSH 有一个 v详细输出的标志 但是如何让 git 使用它呢 如何在 Windows 上使用
  • 将用户名和密码存储在数据库中安全吗?

    我让人们在部落中提交用户名和密码 我需要知道使用此代码将其提交到数据库是否安全 或者在数据库中是否安全 MySQLCon Open Dim SQLADD As String INSERT INTO members username pass
  • 具有许多私有方法的Java测试类[重复]

    这个问题在这里已经有答案了 我有一个类负责将合同从 CSV 导入到数据库 类本身只有一个启动导入的公共方法 其他方法都是私有的 因为只有类本身会使用 并且它们保存逻辑 我开始使用 Spock 对这个类进行测试 并且有很多私有方法 我应该如何
  • 一些使用 PDO 的 ORM?

    我正在寻找一个好的 ORM 即 Active Record 它使用 php 扩展 PDO 作为基础 有什么建议吗 Doctrine or Propel
  • 带有滚动区域的嵌套弹性盒

    我正在尝试在最新的 Chrome Firefox 和 IE11 中实现这种布局 我可以通过以下方式让它工作 html box sizing border box before after box sizing inherit html bo
  • Rails 控制器中创建方法的 SQL 注入预防

    如comment controller rb中所示 def create comment Comment new params comment comment save end 我假设这是 SQL 注入不安全的 但正确的做法是什么 网上的所
  • 重写 Django ModelForm 中的 save 方法

    我无法覆盖ModelForm保存方法 这是我收到的错误 Exception Type TypeError Exception Value save got an unexpected keyword argument commit 我的目的
  • 转换 osmnx 投影地图的经纬度坐标

    我想从 osmnx 获取距离经纬度对最近的节点 下载 osmnx 图形对象后 我想对其进行投影 以便我可以按照文档中的说明从道路网络中删除死胡同 我知道我投影了图表以及需要投影的纬度 经度值 但我实际上不明白以哪种方式 例如 我在我的项目中
  • 在不填充缺失时间的情况下重新采样 Pandas 数据帧

    对数据帧进行重新采样可以使数据帧达到更高或更低的时间分辨率 大多数情况下 这用于降低分辨率 例如 将 1 分钟数据重新采样为每月值 当数据集稀疏时 例如 2020 年 2 月没有收集任何数据 2020 年 2 月的行将填充重采样数据帧的 N
  • 多个
    标签的语义含义

    使用时 dl lists将键与值关联起来 这两个样本之间是否存在语义差异 哪一个提供更好的语义 多个做什么 dd 标签在这种情况下意味着什么 Sample 1 多种的 dd items dl dt Authors dt dd John Le
  • 阻止直接访问php页面,仅在重定向时访问

    我想让我的 php 页面只能从另一个页面重定向访问 并阻止我的用户直接访问它 我的意思是 假设我有一个名为 主 php 还有另一个我想阻止直接访问的 PHP 文件 名为 noaccess php 我想让 noaccess php 仅当我从
  • 在 Android 后台服务中静默 Google 登录

    我正在我的 Android 应用程序中运行后台服务 我使用从登录活动获取的 IdToken 在后端服务器上进行身份验证 该服务正在运行START STICKY模式 因此即使应用程序关闭 该服务也会在后台继续运行以获取来自后端服务器的任何通知
  • 如何正确混合Bootstrap和BEM?

    我正在考虑慢慢重构一个相当大的项目 该项目基于 Angular Bootstrap 构建 只有 16 000 多行 CSS 耶 我一直在越来越多地研究 BEM 并相信这将是一个很好的方法 我们也很有可能转向 React 我对此还不太了解 但
  • 无法在 1.1 版本中使用 1.2 标头编译 OpenCL 应用程序

    我正在使用 Khronos Group 编写一个小型 hello world OpenCL 程序cl hpp适用于 OpenCL 1 2 和 nVidia 的 openCL 库 我的驱动程序和 ICD 支持 OpenCL 1 1 由于 nV
  • 如何使通配符在 SQL Server 报告服务中的 like 运算符中起作用?

    我使用 like 运算符添加了一个过滤表达式 我在值字段中输入什么 我的参数名为 test 我希望过滤器的功能就像 SQL 中的 test 一样 我希望它的行为像 test 这样我就可以传递 来获取查询的所有值 我通过添加带有类似运算符的过
  • Gulp 4 - Gulpfile.js 设置

    我发现有关 Gulp 4 的文档非常难找到 所以我想我可以在这里询问是否有人可以提供帮助 无论如何 我对 Gulp 还很陌生 并且一直使用 Gulp 3 没有任何问题 直到我尝试在我们用于开发的虚拟机上运行它 我的 gulp 文件非常简单