Gruntjs 使用外部配置通过同一构建过程构建多个输出
我正试图利用GruntJS创建一个构建过程,该过程在我公司的多个团队和项目中是统一的。我们的想法是,我们为每个应用程序都有一个配置文件,它只指定需要处理的文件以及它们最后需要连接到的包。所有应用程序的构建过程都是相同的:选择应用程序的配置,使用统一的构建过程处理每个捆绑包中的文件 例如:Gruntjs 使用外部配置通过同一构建过程构建多个输出,gruntjs,Gruntjs,我正试图利用GruntJS创建一个构建过程,该过程在我公司的多个团队和项目中是统一的。我们的想法是,我们为每个应用程序都有一个配置文件,它只指定需要处理的文件以及它们最后需要连接到的包。所有应用程序的构建过程都是相同的:选择应用程序的配置,使用统一的构建过程处理每个捆绑包中的文件 例如: asset.json配置文件指定了两个捆绑包,“main”与1.js+2.js,以及“secondary”与2.js和3.js 构建过程表示对每个bundle进行预处理、缩小,然后基于bundle连接到一个js
我想澄清的是,我完全知道Grunt可以构建多个文件。我试图做的是将多少捆绑包的规范与构建步骤本身分开。Grunt core必须将这两件事结合在一起,这意味着每个项目都必须进入并修改它们的构建步骤,而不是外部配置。根据上面的示例,我应该能够将步骤1中指定的asset.json文件替换为任何具有1、2、3、。。。N个捆绑包,每个捆绑包中包含N个文件(并可能指定脚本或样式之类的“类型”)编辑10/12/13:昨天发布的细节可能是解决问题的另一种方法
这可以通过将要构建的模块名作为命令行参数传递并加载到grunt配置中的整个资产文件中来实现。请注意,这是示例代码,我没有测试过,所以您可能需要为您的情况设置正确的路径等 首先,将
assets.json
文件更新为普通JavaScript文件,然后将其进行如下改造:
module.exports = {
main: ["1.js", "2.js"],
secondary: ["2.js","3.js"]
}
接下来,您可以将命令行参数传递给Grunt,Grunt应该在assets.js中指定一个模块名。例如:
grunt --bundle=main
现在,您需要在GrunFile中加载assets.js
文件:
var assets = require('./assets'); // assuming assets.js is on the same level as your Gruntfile
然后您可以使用以下命令获取参数名称:
var bundle = grunt.option("bundle");
现在,您可以使用
bundle
作为输出文件名,并使用assets.bundle
获取该bundle的数组文件。Anzeo,感谢这里的想法,但这并不是我真正遇到的问题;我需要维护多个配置(针对不同的项目),每个配置包含一个或多个要处理和打包的文件包。开发人员不需要指定要构建的特定捆绑包;这对于目录观察者和其他我们需要的东西来说是不好用的。我对每个项目都有一个单独的资产文件(JSON或JS)感到满意,但如何让每个资产文件都有多个按顺序构建的捆绑包是一个问题。。。“文件”选项可以获取生成文件的对象。。。动态地建立那个列表可能没那么糟糕。@JonHartmann好吧,我当时不明白你真正的问题。如果你提出了一个解决方案作为你自己问题的答案,一定要发布一个解决方案。同时,我会看看我是否能想出一个正确的答案:)谢谢你的关注。。。最终,虽然我分解并编写了补充模块,将基本配置处理为最终的“静态”配置,但它会根据需要为该操作写出。它很笨重,但我最终决定,任何其他事情都需要深入研究格朗特的死刑。谢谢你抽出时间来反驳我。如果我遇到合适的解决方案,我会记得把它贴在这里。