在我的 gulp 任务中运行包的 gulp 任务

Posted

技术标签:

【中文标题】在我的 gulp 任务中运行包的 gulp 任务【英文标题】:Run package's gulp task within my gulp task 【发布时间】:2017-03-13 02:19:32 【问题描述】:

有没有办法从我的 gulp 任务中运行包 gulp 任务?这是我的文件结构:

Root
|
|-- Gulpfile.js (task: get-files)
|
|-- node_modules
     |
     |-- packageA
          |
          |-- gulpfile.js (task: compile-custom)

我想在我自己的 gulpfile 中的 get-files 任务中从 packageA 运行 compile-custom 任务。理想情况下,我还可以从compile-custom 任务中获得回调,以了解它何时完成。

【问题讨论】:

【参考方案1】:

我建议不要根据需要从另一个 gulpfile 运行任务,尤其是从 node_modules 包中运行。不想这样做的一个原因是由于包可以更改/更新,然后因此而破坏您的代码。

您最好将您想要的 gulpfile 任务复制到您的 gulpfile 中并将其合并到您的项目中,或者只是创建一个新文件,您可以在其中轻松区分它与您的 gulpfile 不同的东西,然后通过要求它来调用它您自己的 gulfile 就像您使用任何其他包和/或 JS 函数一样。使用这些选项中的任何一个都不要忘记将依赖项安装到您的 package.json 文件中,然后运行 ​​npm install


注意:要从 gulp 任务中运行 gulp 任务,您可以使用

gulp.start('taskname')

尽管只有在完全必要时才应使用以下内容。此外将在 Gulp v4 (refer to this) 的较新版本中被弃用。调用任务的方法是通过创建上面提到的函数并在 gulpfile 中调用该函数。


gulp 函数调用示例:

 var someFile = require('./someFile.js'); 

 gulp.task('my-custom-task', function () 
   someFile.doSomething('foo', 'bar');
 );

如果你的函数异步执行某些操作,它应该在最后调用一个回调,以便 gulp 能够知道它什么时候完成:

 var someFile = require('./someFile.js'); 

 gulp.task('my-custom-task', function (callback) 
   someFile.doSomething('foo', 'bar', callback);
 );

【讨论】:

我能理解这种担忧。为了简单起见,我的目标是把它变成一个单一的 gulp 任务。我的计划是运行packageA,它将文件输出到packageAdist 目录。从那里,我抓取该文件并将其放在我的项目的 js 目录中,因此需要同步调用。 如果您想同步调用并且需要知道最后一个任务何时完成,我建议您查看Run-Sequence Module。您只需按您想要的顺序放置事物,它们将按顺序运行,一旦您完成一项任务,您将继续执行下一项任务。在你的情况下,这似乎是你想要的。 谢谢!我会尝试结合使用此解决方案并回复您。

以上是关于在我的 gulp 任务中运行包的 gulp 任务的主要内容,如果未能解决你的问题,请参考以下文章

在Visual Studio 2015中启动IIS Express会话后,如何运行gulp任务

通过 npm 自动运行 gulp 任务

gulp.src()或它在gulp任务之外的替代方案

高级前端以同步的方式运行 Gulp 任务和任务中的步骤

八Gulp自动化构建工具

任务运行程序(Gulp、Grunt 等)和捆绑程序(Webpack、Browserify)。为啥要一起使用?