- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在执行几个 gulp 任务时遇到了一些问题。我已经尝试了一切并遵循了文档,但似乎没有任何效果。希望有人能帮忙。
我想做的是进行 sass 缩小,然后将结果同步到本地 vagrant 文件夹(不是远程服务器),然后重新加载浏览器同步。
我遇到的问题是我正在与 gulp 想要一起运行所有任务的事实作斗争。我需要它们一个接一个地发生。所有任务都是独立工作的,我只是很难让它们按顺序运行。我尝试过回调并玩依赖,但我显然错过了一些东西。
我的设置很复杂,我的所有任务都在单独的 js 文件中,但我尝试将我所拥有的内容合并到这个单一的 github 要点中,以便人们可以提供帮助。感谢您的帮助。
https://gist.github.com/CodeStalker/9661725dcaf105d2ed6c
我让它工作的唯一方法是将 rsync 通过管道传输到 sass 放大的末尾,并使用 server: true 变量将其包装在 gulp-if 中,这样它只在知道它运行在虚拟机。不理想。
最佳答案
这是人们在使用 Gulp 时遇到的常见问题,尤其是来自 Grunt 时。 Gulp 是最大程度的异步,它总是希望同时做尽可能多的事情。
让任务按顺序运行的第一步是让 gulp 知道你的任务何时结束,这可以通过几种不同的方式来完成。
1) 返回一个流,gulp 将等待流的“结束”事件作为完成该任务的触发器。示例:
gulp.task( "stream-task", function(){
return gulp.src( srcGlob )
.pipe(sass())
.pipe(compressCSS())
.pipe(gulp.dest( destGlob ));
});
2) 返回一个 Promise,gulp 将等待 Promise 进入已解决状态,然后再通知任务已完成。示例:(仅为了表达要点并不完美)
gulp.task( "promise-task", function() {
return new Promise(function(resolve, reject){
fs.readFile( "filename", function( err, data ){
if( err ){ return reject(err); }
return resolve( data );
});
});
});
3) 调用任务回调,如果函数不返回任何内容,但函数签名带有参数,则该参数将是一个回调函数,您可以调用该函数来表示任务已完成。示例:
gulp.task( "cb-task", function( done ){
fs.readFile( "filename", function( err, data ){
// do stuff, call done...
done();
});
});
大多数情况下,您将返回像示例 1 这样的流,这就是典型的 gulp 任务的样子。选项 2 和 3 更适合当您执行的操作并非真正基于传统流的 gulp 任务时。
下一步是设置一项任务对另一项任务的“依赖性”。 gulp 文档显示了这样做的方式:
gulp.task( "some-task-with-deps", [ "array-of-dep", "task-names" ], function(){ /* task body */ });
现在我不知道当前状态,但这些依赖项任务未按正确的顺序运行存在一些问题。这最初是由 gulp 的依赖项之一(我相信是协调器)的问题引起的。 NPM 领域的一位好心绅士制作了一个漂亮的小包,供在解决错误时临时使用。我开始使用它来安排我的任务,并且没有回头。
https://www.npmjs.com/package/run-sequence
文档很好,所以我不会在这里详细介绍。基本上,run-sequence
可以显式地排序您的 gulp 任务,只要记住,如果您没有为每个任务实现上述三个选项之一,它就不起作用。
看看你的要点,在你的任务中添加几个缺少的 return 语句可能会成功,但作为一个例子,这就是我工作中的项目的“开发”任务......
gulp.task( "dev", function( done ){
runSequence(
"build:dev",
"build:tests",
"server:dev",
[
"less:watch",
"jscs:watch",
"lint:watch",
"traceur:watch"
],
"jscs:dev",
"lint:dev",
"tdd",
done // <-- thats the callback method to gulp let know when this task ends
);
});
另外,作为引用,我的“build:dev”任务是 run-sequence
gulp.task( "build:dev", function( done ){
runSequence(
"clean:dev",
[
"less:dev",
"symlink:dev",
"vendor:dev",
"traceur:dev"
],
done // <-- thats the callback method to let know when this task ends
);
});
如果任务需要按顺序运行,则任务名称将作为其自己的参数添加到 runSequence
(如果它们不冲突),则将它们作为数组发送以使任务同时运行时间并加快构建过程。
关于监视任务需要注意的一点!通常,监视任务无限期地运行,因此尝试从它们返回“无限”流可能会让 gulp 认为任务永远不会结束。在这种情况下,我将使用回调方法让 gulp 认为任务已完成,即使它仍在运行,例如...
gulp.task( "watch-stuff", function( done ){
gulp.watch( watchGlob )
.on( "change", function( event ){ /* process file */ });
done();
});
有关监视任务以及如何进行增量构建的更多信息,请查看我前几天写的答案,Incremental gulp less build
关于Gulp任务顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179578/
Task.WaitAll 方法等待所有任务,Task.WaitAny 方法等待一个任务。如何等待任意N个任务? 用例:下载搜索结果页面,每个结果都需要一个单独的任务来下载和处理。如果我使用 WaitA
我正在查看一些像这样的遗留 C# 代码: await Task.Run(() => { _logger.LogException(LogLevel.Error, mes
如何在 Linux 中运行 cron 任务? 关注此Q&A ,我有这个 cron 任务要运行 - 只是将一些信息写入 txt 文件, // /var/www/cron.php $myfile = fo
原谅我的新手问题,但我想按顺序执行三个任务并在剧本中使用两个角色: 任务 角色 任务 角色 任务 这是我到目前为止(任务,角色,任务): --- - name: Task Role Task ho
我有一个依赖于 installDist 的自定义任务 - 不仅用于执行,还依赖于 installDist 输出: project.task('run', type: JavaExec, depends
从使用 Wix 创建的 MSI 运行卸载时,我需要在尝试删除任何文件之前强行终止在后台运行的进程。主要应用程序由一个托盘图标组成,它反射(reflect)了 bg 进程监控本地 Windows 服务的
我想编写 Ant 任务来自动执行启动服务器的任务,然后使用我的应用程序的 URL 打开 Internet Explorer。 显然我必须执行 startServer先任务,然后 startApplic
使用 ASP.NET 4.5,我正在尝试使用新的 async/await 玩具。我有一个 IDataReader 实现类,它包装了一个特定于供应商的阅读器(如 SqlDatareader)。我有一个简
使用命令 gradle tasks可以得到一份所有可用任务的报告。有什么方法可以向此命令添加参数并按任务组过滤任务。 我想发出类似 gradle tasks group:Demo 的命令筛选所有任务并
除了sshexec,还有什么办法吗?任务要做到这一点?我知道您可以使用 scp 复制文件任务。但是,我需要执行其他操作,例如检查是否存在某些文件夹,然后将其删除。我想使用类似 condition 的东
假设我有字符串 - "D:\ApEx_Schema\Functions\new.sql@@\main\ONEVIEW_Integration\3" 我需要将以下内容提取到 diff 变量中 - 文档名
我需要编写一个 ant 任务来确定某个文件是否是只读的,如果是,则失败。我想避免使用自定义选择器来为我们的构建系统的性质做这件事。任何人都有任何想法如何去做?我正在使用 ant 1.8 + ant-c
这是一个相当普遍的计算机科学问题,并不特定于任何操作系统或框架。 因此,我对与在线程池上切换任务相关的开销感到有些困惑。在许多情况下,给每个作业分配自己的特定线程是没有意义的(我们不想创建太多硬件线程
我正在使用以下 Ansible playbook 一次性关闭远程 Ubuntu 主机列表: - hosts: my_hosts become: yes remote_user: my_user
如何更改 Ant 中的当前工作目录? Ant documentation没有 任务,在我看来,最好的做法是不要更改当前工作目录。 但让我们假设我们仍然想这样做——你会如何做到这一点?谢谢! 最佳答案
是否可以运行 cronjob每三天一次?或者也许每月 10 次。 最佳答案 每三天运行一次 - 或更短时间在月底运行一次。 (如果上个月有 31 天,它将连续运行 2 天。) 0 0 */3 * *
如何在 Gradle 任务中执行托管在存储库中的工具? 在我的具体情况下,我正在使用 Gradle 构建一个 Android 应用程序。我添加了一项任务,将一些 protobuf 数据从文本编码为二进
我的项目有下一个结构: Root |- A |- C (depends on A) \- B (depends on A) 对于所有子项目,我们使用自己的插件生成资源:https://githu
我设置了一个具有4个节点的Hadoop群集,其中一个充当HDFS的NameNode以及Yarn主节点。该节点也是最强大的。 现在,我分发了2个文本文件,一个在node01(名称节点)上,一个在node
在 TFS 2010 中为多个用户存储任务的最佳方式是什么?我只能为一项任务分配一个。 (例如:当我计划向所有开发人员演示时) (这是一个 Scrum Msf 敏捷项目,其中任务是用户故事的一部分)
我是一名优秀的程序员,十分优秀!