javascript、gulp、观看、更改

2024-01-03

我无法理解这个问题。 这应该是每次修改监视文件时执行的 gulp 任务。任何人都可以解释为什么需要通过管道传输监视的文件changed plugin?

gulp.task('build-css', function () {
  return gulp.src(paths.css)
  .pipe(changed(paths.output, {extension: '.css'}))
  .pipe(gulp.dest(paths.output));
});

gulp.task('watch', ['serve'], function() { 
  gulp.watch(paths.css, ['build-css']); 
}); 

免责声明:这不是我的代码。只是想了解发生了什么,以便创建我自己的自定义监视任务。


和...之间的不同gulp.watch(), gulp-changed and gulp-watch似乎引起了很多混乱,所以这是我试图解决这个混乱的问题:

gulp.watch()

这是三者中唯一的一个part of gulp itself https://github.com/gulpjs/gulp/blob/ae1ef092e6e3853760224f1b7acf5876f81c03f0/docs/API.md#gulpwatchglob--opts-tasks-or-gulpwatchglob--opts-cb而不是插件。这很重要,因为这意味着与其他两个不同,它不会传递给pipe()gulp 流的函数。

相反,它通常直接从 gulp 任务内部调用:

 gulp.task('build-css', function() { 
    return gulp.src('src/**/*.css')
      .pipe(doSomethingHere())
      .pipe(gulp.dest('dist/css'));
 }); 

 gulp.task('watch', function() { 
    gulp.watch('src/**/*.css', ['build-css']); 
 }); 

在上面的gulp.watch()用于监听变化.css文件。只要gulp.watch()正在对 a 进行任何更改.css文件自动导致执行build-css task.

这就是麻烦开始的地方。请注意,有关更改的文件的信息没有传递到build-css?这意味着即使你只改变一个.css file all你的.css文件将通过doSomethingHere()再次。这build-css任务不知道其中哪一个发生了变化。只要您只有一手的文件,这可能没问题,但随着文件数量的增加,可能会减慢您的构建速度。

那就是那里gulp-changed进来。

gulp-changed

This plugin https://www.npmjs.com/package/gulp-changed被编写为充当 gulp 流中的过滤器阶段。其目的是从流中删除自上次构建以来未更改的所有文件。它通过将源目录中的文件与目标目录中的结果文件进行比较来实现此目的:

 gulp.task('build-css', function() { 
    return gulp.src('src/**/*.css')
      .pipe(changed('dist/css'))  //compare with files in dist/css
      .pipe(doSomethingHere())
      .pipe(gulp.dest('dist/css'));
 }); 

 gulp.task('watch', function() { 
    gulp.watch('src/**/*.css', ['build-css']); 
 }); 

在上面的build-css每次更改仍会调用任务.css文件和所有.css文件被读入。但是只有那些文件实际上已经改变了现在到达昂贵的doSomethingHere()阶段。其余的被过滤掉gulp-changed.

这种方法的好处是可以加快速度build-css即使您没有监视文件更改。您可以显式调用gulp build-css在命令行上,并且仅显示自上次调用以来已更改的文件build-css将被重建。

gulp-watch

This plugin https://www.npmjs.com/package/gulp-watch是对内置的改进的尝试gulp.watch(). While gulp.watch() uses gaze https://www.npmjs.com/package/gaze监听文件更改,gulp-watch uses chokidar https://www.npmjs.com/package/chokidar通常被认为是两者中更成熟的一个。

您可以使用gulp-watch达到与使用相同的效果gulp.watch() and gulp-changed结合:

 gulp.task('watch-css', function() { 
    return gulp.src('src/**/*.css')
      .pipe(watch('src/**/*.css'))
      .pipe(doSomethingHere())
      .pipe(gulp.dest('dist/css'));
 }); 

这再次观看所有.css更改文件。但这一次每当.css文件被更改,该文件(和only该文件)被再次读入并重新发送到它所经过的流中doSomethingHere()正在前往目标目录的途中。


请注意,此比较以相当粗略的方式描绘了所有三种替代方案,并省略了某些细节和功能(例如,我还没有讨论您可以传递给两者的回调函数)gulp.watch() and gulp-watch),但我认为这应该足以了解三者之间的主要差异。

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

javascript、gulp、观看、更改 的相关文章

  • fitBounds() 显示整个地球(如果地图先隐藏然后显示)

    I have a bunch or markers and I want to show only the area containing them I found a long list of similar questions see
  • 具有多个参数的 JavaScript 函数

    我有一个将数组作为输入的函数 我如何修改它以使用变量参数和数组 例如我想要arrSum 1 2 3 arrSum 1 2 3 回来true即两者都应该返回 6 const arrSum arr gt arr reduce a b gt a
  • 带有路径连接器的 jQuery 可拖动小部件

    参考该图像 Block1 和Block2 都是可拖动的 我的问题是 如何在两个块之间制作红色链状连接器 要求是链条应该延伸到块被拖动的地方 请提供任何教程 学习材料的指示 谢谢 有许多 Jquery 插件可用于创建数据库可视化或流程图的连接
  • Soundcloud自定义播放器动态添加和播放歌曲

    我在用soundcloud自定义播放器 https github com soundcloud soundcloud custom player创建一个可以播放所有歌曲的播放器 我的网站 当我只放置任何曲目或帖子的静态网址时 这效果非常好
  • 如何使事件 DOM 侦听器适应 Google Maps JavaScript API v3.35

    我曾经使用以下代码来捕获用户的 Enter 键事件 如果用户没有选择其中任何一个 即没有标记为 pac 的 pac item 则自动从自动完成结果 pac items 中选择第一个结果 项目选择 var input document get
  • Google Analytics 是否具有针对长时间运行的网络应用程序的“心跳”功能?

    我正在制作一个专注于观看嵌入内容的网络应用程序 我希望应用程序客户端向 GA Google Analytics 发送 心跳 类型的信号以保持会话继续进行 现在看来 如果访问者观看视频 5 10 分钟 GA 就会假设他已经离开页面 并将用户的
  • JavaScript 闭包与匿名函数

    我和我的一个朋友目前正在讨论 JS 中什么是闭包 什么不是 我们只是想确保我们真正正确地理解它 我们以这个例子为例 我们有一个计数循环 想要在控制台上延迟打印计数器变量 因此我们使用setTimeout and closures捕获计数器变
  • 使用 ChartJS v2.0 自定义图例

    我正在尝试在 ChartJS v2 0 中创建自定义图例模板 在 ChartJS v1 中 我只是向新的 Chart 构造函数添加了一个属性 例如 legendTemplate ul li span style background col
  • CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom -

    Edit 这是windows的行为 linux就失败了 首先 如果您使用 casper 成功导航 gmail 没有随机等待时间 从 20 秒到 5 分钟 请告诉我 我想在我们的网站上注册 然后使用 Gmail 自动验证我的注册 整个注册步骤
  • 装饰器功能不起作用(意外标记)

    刚刚尝试在 React 中使用装饰器 import React from react import Fade from Transitions Fade import withVisible from withVisible withVis
  • 使用 var 与 let/const 进行块级变量重新声明

    Part 1 给出这个例子 var number 10 var number 42 console log number 42 为什么第 4 行不抛出Uncaught SyntaxError Identifier number has al
  • 在 Codeigniter 中使用/嵌入 Ember js

    我即将开始开发一个 Web 应用程序 使用 Ember js 作为前端技术 使用 Codeigniter 作为后端 我遇到的问题是如何在 codeigniter 中嵌入或使用 ember js 可以通过 Web 服务从 codeignite
  • JavaScript:字符串连接性能低下? Array.join('')?

    我读过如果我有一个for循环 我不应该使用字符串连接 因为它很慢 例如 for i 0 i lt 10000000 i str a 相反 我应该使用Array join 因为它更快 var tmp for i 0 i lt 10000000
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 在 JavaScript 中将整数数组转换为字符串数组

    我有一个如下所示的数组 var sphValues 1 2 3 4 5 然后我需要转换上面的数组 如下所示 var sphValues 1 2 3 4 5 我怎样才能转换 我用它来自动完成 您可以使用map https developer
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 避免使用 Grunt cssmin 任务来删除重复条目

    在我的 Gruntfile 中 我使用 cssmin grunt contrib cssmin 任务 就像是 cssmin css src dist styles css dest dist styles min css 问题是 style
  • 使用 Angular JS 使图像出现在弹出窗口上

    这是我在 StackOverflow 上的第一篇文章 我正在自学 Angular 所以我是一个初学者 目前很困惑 我正在使用 Angular 创建一个网页 其中一个页面涉及一个按钮和一个弹出窗口 我想将图像放入弹出窗口中 但在实现此操作时遇
  • 检测 Service Worker 离线状态的最佳实践

    我有一个服务工作者应该缓存一个offline html客户端没有网络连接时显示的页面 然而 有时它会认为导航器已离线 即使它并未离线 那是 navigator onLine false 这意味着用户可能会得到offline html而不是实
  • 如何在 PHP、HTML 表单和 Javascript 之间传递布尔值

    我有一个 PHP 程序 它使用 HTML 表单并使用 JavaScript 进行验证 HTML 表单中有一个隐藏字段 其中包含一个布尔值 该值由 PHP 设置 由 JavaScript 在提交时进行验证 然后传递到另一个 PHP 页面 当我

随机推荐

  • 尝试使用 woocommerce_new_order_item 挂钩保存订单项元数据

    Add meta to order item param int item id param array values return void function cart add meta data booking item id valu
  • 使用 Wikimedia API 获取位置

    如何使用 Mediawiki API 获取 Wikipedia 文章的城市 国家位置 假设我想确定圣家族大教堂位于哪个国家 哪个城市 我应该使用什么属性 尝试以下查询 And see 扩展 地理数据 https www mediawiki
  • React Router v4 中的嵌套路由

    我正在尝试设置一些嵌套路由来添加通用布局 检查一下代码
  • 在应用程序购买测试帐户无法在 IOS 中运行?

    我们正在使用沙盒测试帐户测试应用程序购买 在测试时它显示验证 在验证付款信息后 当我尝试在应用程序购买中测试时 它会将我重定向到应用程序商店 应用程序商店显示超时 我做错了什么吗 我还创建了另外三个沙箱测试帐户 用于在应用程序购买中进行测试
  • Parallel.ForEach 未生成所有线程

    我在使用 Parallel ForEach 时遇到一些问题 我需要模拟几个硬件组件 等待传入连接并回复它 我当前的代码如下 Task Factory StartNew gt components component gt var liste
  • 第 N 次和第 (N+1) 次出现之间的正则表达式字符串

    我试图找到两个特殊字符之间第 n 次出现的子字符串 例如 一 二 三 四 五 比如说 我正在寻找 第 n 次和第 n 1 次 第二次和第三次出现 之间的字符串字符 结果是 三 我想使用正则表达式来做到这一点 有人可以指导我吗 我当前的尝试如
  • 从 SQL Server 2008 调用非托管 C/C++ DLL 函数

    我有一个庞大的 C C 函数库 需要从 SQL Server 2008 调用 我编写了一个 C 适配器类 它从 Win32 DLL 加载这些函数DllImport并将它们暴露给 Net 代码 这在大多数 Net 应用程序中都可以正常工作 现
  • 如何将参数名称作为参数传递?

    我有这个代码 hobbies2 form cleaned data pop hobbies2 PersonneHobby objects filter personne obj delete for pk str in hobbies2 t
  • UpdateSourceTrigger=显式

    我正在创建一个包含多个文本框的 WPF 窗口 当用户按下 确定 按钮时 我希望所有文本框都被评估为非空白 我知道我必须将 TextBox 与 Explicit 的 UpdateSourceTrigger 一起使用 但我是否需要为每个文本框调
  • 在资源有限的环境中禁用背景视频

    对于基于网络的媒体播放器项目 我正在尝试使用简单的一些微妙的背景视频
  • 使用 asp.net WebService 和 Android 将图像上传到 Azure Blob 存储?

    我正在尝试通过以下方式将选定的图像从我的 Android 设备上传到 Azure Blob 我制作的 asp net WebService 但我在 android 中收到橙色错误 W System err 454 SoapFault 故障代
  • Windows 客户端应用程序的登录对话框

    我可以调用 Win32 函数来显示 Windows 登录对话框吗 例如 Internet Explorer 和 Visual Studio 的团队资源管理器在访问网站时都会显示凭据对话框 我如何显示该对话框 我有一个 NET Windows
  • CLion 和 Crypto++ 库

    不久前 我开始在 Visual Studio 2015 中编写应用程序 在设置所有库依赖项时没有出现任何问题 现在 我决定搬到 CLion 但是我的应用程序依赖于cryptopp库 我需要将其链接到我的 CLion 项目中 目前 我面临着大
  • 如何仅获取表达式系列输出的最后一个值?

    我不需要这个表达式的整个数组 只需要它的最近 当前 值 如何修改其代码 UpperBollinger ta sma close 20 2 ta stdev close 20 当然 我可以用它来获得相同的较低频段 你不能这样做 Once a
  • std::bind 如何按值获取可变参数,即使具有通用引用?

    函数签名为std bind 如下 https en cppreference com w cpp utility functional bind template lt class F class Args gt unspecified b
  • 是否可以在 Google Maps API 中检索特定区域内的所有地址列表?

    假设我想检索罗马所有地址的列表 如何在 Google Maps API 或任何其他网络服务中以编程方式实现此目的 我不需要地址的实际位置 只需要地址名称的列表 您无法使用 Google Maps API 来做到这一点 你可以做反向地理编码
  • 用最少的计算量找到素数的算法

    假设您要编写一个函数 方法来查找素数 最有效的方法是什么 我认为这将是一个类似这样的测试 下面的代码是半c bool primeTest int x X is the number we re testing int testUpTo in
  • 获取 CGPath 上的随机 CGPoint

    我有一个代表椭圆的 CGPath 我想在该路径上的随机点放置一个精灵节点 如何获得该 CGPath 上的随机 CGPoint 谈到封闭式CGPath并思考一种快速方法来获得无限点之间的随机点CGPath 首先我已经翻译成Swift this
  • 如何向我的 gameScene.swift 添加滚动视图,该视图将滚动浏览一系列精灵?

    所以我创建了一个 3x10 的精灵网格 它超出了屏幕的底部边缘 我添加了一个 UIScrollView 并且出现了滚动指示器 但实际上没有发生任何移动 这是代码 import SpriteKit var buyButton SKSprite
  • javascript、gulp、观看、更改

    我无法理解这个问题 这应该是每次修改监视文件时执行的 gulp 任务 任何人都可以解释为什么需要通过管道传输监视的文件changed plugin gulp task build css function return gulp src p