Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以将参数传递给吞咽任务吗?_Javascript_Node.js_Visual Studio_Gulp - Fatal编程技术网

Javascript 我可以将参数传递给吞咽任务吗?

Javascript 我可以将参数传递给吞咽任务吗?,javascript,node.js,visual-studio,gulp,Javascript,Node.js,Visual Studio,Gulp,我在VisualStudio中使用gulp,它只是一个客户端构建工具 我有很多任务,这些任务在各个项目中都很常见,因此我将它们移动到单独的文件中,并在项目的gulpfile.js中引用它们,如下所示: require("../path/to/task/files/fooCommon.js"); // has a task called "fooCommon" 然后在gulpfile.js中,我将其包装在一个任务中: gulp.task("foo", ["fooCommon"], functi

我在VisualStudio中使用gulp,它只是一个客户端构建工具

我有很多任务,这些任务在各个项目中都很常见,因此我将它们移动到单独的文件中,并在项目的gulpfile.js中引用它们,如下所示:

require("../path/to/task/files/fooCommon.js");  // has a task called "fooCommon"
然后在gulpfile.js中,我将其包装在一个任务中:

gulp.task("foo", ["fooCommon"], function () { });
这很好地工作,我可以跨项目重用常见任务


但是,有些任务需要配置,这些配置只能在gulpfile.js中访问-如何将它们作为参数传递给任务?

我想到了两件事。第一种方法是,它可以创建一些可用的东西作为一个gulp插件,而不是foocomon.js创建任务,因此要使用它,只需将配置参数传递给插件即可。如果这不适合这种情况,那么您可以将任务逻辑移动到包装器函数中,例如

foocomon.js 格尔普菲尔
我想到两件事。第一种方法是,它可以创建一些可用的东西作为一个gulp插件,而不是foocomon.js创建任务,因此要使用它,只需将配置参数传递给插件即可。如果这不适合这种情况,那么您可以将任务逻辑移动到包装器函数中,例如

foocomon.js 格尔普菲尔
是否有任何理由认为公共逻辑需要实际注册任务?为什么不导出module.exports=functiongulp,config{这样的东西,并让它注册require../path/to/task/files/foocomon.jsgulp,{…}这样的任务呢@loganfsmyth不确定你的意思。虽然如果我理解正确,gulpfile.js不会知道这些任务,因为它们没有注册。而且,只有gulpfile可以访问项目的配置,这些外部任务文件除了单个任务之外不知道任何事。有什么原因需要使用通用逻辑吗实际注册任务?为什么不导出module.exports=functiongulp,config{之类的内容,并让它注册require../path/to/task/files/foocomon.jsgulp,{…}之类的任务@loganfsmyth不确定你的意思。虽然如果我理解正确,gulpfile.js不会知道这些任务,因为它们没有注册。而且,只有gulpfile有权访问项目的配置,这些外部任务文件除了单个任务之外什么都不知道。这很好。甚至不确定你是否需要last行,具体取决于您的设置。@hbob Cool.最后一行您是对的,我只是误解了您的示例,我以为您是说在foo任务中也有一个body。定义任务时,您可以完全关闭该函数,例如gulp.taskfoo,[foocomon];谢谢,这是一种很好的重用任务的方法,因此您可以在命令行中将相同的任务与应用程序“X”作为应用程序“Y”一起使用,只需在命令行中传入一个附加参数。但是,如果您试图使用相同的异步任务同时构建多个应用程序,此解决方案将遇到问题。如果任务是异步的,则Y在您需要加载应用程序Y的配置之前,您将很难确定应用程序X的任务Foo是否已完成。我很难确定如何创建一个真正动态的、可重用的吞咽任务,而不需要获取参数。这很好。根据您的设置,您甚至不确定是否需要最后一行。@hbob Cool。您很好关于最后一行,我只是误解了你的例子,我以为你说你在foo任务中也有一个body。定义任务时,你可以完全关闭函数,例如gulp.taskfoo,[foocomon];谢谢,这是一种很好的重用任务的方法,因此您可以在命令行中将相同的任务与应用程序“X”作为应用程序“Y”一起使用,只需在命令行中传入一个附加参数。但是,如果您试图使用相同的异步任务同时构建多个应用程序,此解决方案将遇到问题。如果任务是异步的,则Y在需要加载应用程序Y的配置之前,您将很难确定应用程序X的任务Foo是否已完成。我很难确定如何创建一个真正动态、可重用的吞咽任务,而不需要获取参数。
module.exports = function(gulp, config){
    gulp.task("fooCommon", function () {
        // Use the config here
    });
};
// Define whatever config you need
var gulp = require('gulp');

var config = {...}

var taskCreator = require('../path/to/task/files/fooCommon.js');

// Call the function in 'fooCommon.js', which will be passed the config, and
// will create all the tasks you have in common.
taskCreator(gulp, config);

// Register a task depending on the task created by the exported function.
gulp.task("foo", ["fooCommon"], function () { });