使用外部配置通过相同的构建过程构建多个输出

时间:2013-12-05 20:54:09

标签: gruntjs

我正在尝试利用GruntJS创建一个在我公司的多个团队和项目中统一的构建过程。我们的想法是,每个应用程序都有一个配置文件,它只指定需要处理的文件以及最后需要连接的捆绑包。所有应用程序的构建过程都是相同的:选择应用程序的配置,使用统一的构建过程处理每个包中的文件。

例如:

  1. asset.json配置文件指定两个包,“main”包含1.js + 2.js,“secondary”包含2.js和3.js
  2. 构建过程说明每个捆绑包,预处理,缩小,然后连接到基于捆绑的js文件
  3. 获取“main.js”和“secondary.js”的输出
  4. 我遇到的问题是Grunt采用“静态”配置并执行它。我已经抽象出构造的构建,以便我可以动态添加块,但是现在我没有看到更好的方法,而不是逐字循环每个bundle并为构建过程的每个部分构建一个唯一的任务对于每个捆绑包,构建要执行的任务队列,然后在构建过程中运行队列中的每个任务。它绝对可能,但它的手工工作很多,似乎容易破碎。有没有办法按顺序执行每个任务,因为我循环遍历捆绑包?有没有更好的方法来实现config + source的相同净结果,N捆绑出来?

    我想清楚,我完全清楚Grunt可以构建多个文件。我想要做的是从构建步骤本身分离多少个bundle的规范。 Grunt核心必须将这两个东西结合在一起,这意味着每个项目都必须进入并改变它们的构建步骤而不是外部配置。根据上面的示例,我应该能够将步骤1中指定的asset.json文件替换为任何具有1,2,3,... N个捆绑包的配置文件,每个配置文件中包含N个文件(并且可能指定一个“类型”,如脚本或样式)。

1 个答案:

答案 0 :(得分:0)

编辑2013年12月13日:Nitty Gritty昨天发布了an article,这可能是解决问题的另一种方法。


这可以通过将您要构建的模块名称作为命令行参数传递并加载到grunt配置中的整个资产文件中来完成。请注意这是示例代码,我没有对此进行测试,因此您可能需要设置正确的路径等。

首先将assets.json文件更新为纯JavaScript文件,并按如下方式进行改造:

module.exports = {
    main: ["1.js", "2.js"],
    secondary: ["2.js","3.js"]
}

接下来,您可以将命令行参数传递给Grunt,Grunt应指定assets.js中的一个模块名称。例如:

grunt --bundle=main

现在,您需要加载Gruntfile中的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来获取该捆绑包的数组文件。