gpt4 book ai didi

javascript - Grunt - 在运行任务之前动态设置配置

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:20 25 4
gpt4 key购买 nike

所以这是我假设的 fooTask 配置对象,它对一堆 JS 文件执行某些操作(与问题无关)

grunt.initConfig({
fooTask: {
app1: 'app1/*.js',
app2: 'app2/*.js',
app3: 'app3/*.js'
}
});

如您所见,使用这种方法,我必须运行 fooTask 3 次并将每个应用程序指定为目标:

grunt fooTask:app1
grunt fooTask:app2
grunt fooTask:app3

不用说,这不会随着应用数量的增加或此类 foo 任务数量的增加而扩展,因为人们必须为每个应用一遍又一遍地 C&P 相同的代码。

所以理想情况下,我想定义的只是一个目标,其中应用程序的名称作为配置变量传入

grunt.initConfig({
fooTask: {
dist: '<%=appName%>/*.js'
}
});

然后我想调用 fooTask 3 次,每个应用调用一次,并将正确的应用设置为 appName

var apps = ['app1', 'app2', 'app3'];
apps.forEach(function(app) {
var currAppName = app;

// Run fooTask but how do I specify the new currAppName config?
grunt.task.run('fooTask');
});

根据上面的代码,我知道我可以使用 grunt.task.run 运行我的 fooTask,但是如何为我的任务设置 appName 配置?

请注意,这个问题类似于另一个也没有正确答案的问题 - Pass Grunt config options from task.run

非常感谢。

最佳答案

编辑 2:

所以不要在意第一次编辑下面的垃圾,留下什么不起作用的例子。就我而言,能够在运行时设置任务内的值非常重要,因此我选择了文件系统。也许它适合您的需求。

grunt.initConfig({
someTask: {
someKey: fs.readFileSync('file.txt', { encoding: 'utf8' })
}
});

当然,如果您需要一堆不同的应用程序名称,您可以在任务之外执行 readFile。


编辑:嗯。我发誓我在写这篇文章的时候已经开始工作了……但现在不是了。 Grunt 只是将额外的参数视为额外的未找到任务。


我试图自己解决这个问题,最后发生了一个“呃”的时刻 - 为什么不解析 process.argvgrunt.initConfig 之前?

module.exports = function(grunt) {

var sourcefile = process.argv[2] || 'default.js'; // <- this

grunt.initConfig({
uglify: {
main: {
src: sourcefile, // <- voila :)
dest: sourcefile.substring(0, sourcefile.length-3) + '.min.js'
}
}
});

grunt.loadNpmTasks('uglify');

grunt.registerTask('default', ['uglify']);
};

并从命令行使用:

grunt mykillerscript.js

出于同样的原因,我什至没有尝试使用 grunt.option,因为所有示例只显示了指示运行哪个任务,但如果有更“grunt”的方式来执行此操作,我不会感到惊讶。

关于javascript - Grunt - 在运行任务之前动态设置配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com