我有一个 Web 应用程序,我正在使用 Grunt 开发和管理其前端资产。这是其组织的粗略概念:
_app
_fonts
_img
_lib
_scss
_templates
FrontendApplication
Gruntfile.js
所以我运行 grunt watch 来跟踪我的文件,然后使用 grunt-copy 将生成的文件复制到服务器提供的 dist/DATE 文件夹中。喜欢:
FrontendApplication/FrontendApplication/Assets/2014-06
在这个文件夹里面是最终的静态文件,像这样:
app
css
fonts
img
lib
index.html
现在,我们有不同的客户使用相同的代码库,但前端资产略有不同,例如徽标图像和一些新的 css 来覆盖默认的 css,例如 companysname.css。因此,我们正在考虑将应用程序的定制版本发布到客户的不同文件夹中,例如:
FrontendApplication/FrontendApplication/Assets/CLIENTNAME
我的上级提供了一个 app.conf,内容如下:
[Domains]
default=2014-06
client1=client1
他说我们应该让 Grunt 读取这个文件,然后确定要发布到哪个文件夹。即如果定义了client1,我们将自定义资产发布到client1/ 文件夹。否则,我们将采用默认值 2014-06/。服务器将在适用的情况下查找 client1/ 文件夹,如果找不到,它将指向默认的 2014-06/ 文件夹以显示静态资产。
所以这是我的问题:
- Grunt 是否可以从位于目录中的文件中读取和提取信息,然后将它们作为参数传递给配置文件以供其他任务使用?你打算怎么做?
- 如果可能的话,我如何根据客户端维护不同版本的前端资产?
在我看来,这是可以做的:
首先,在 Git branch master下,在 gruntfile 中设置一个指向目标文件夹的变量,例如:
var globalConfig = {
//valueWePluckedFromAppConf: '2014-06',
destinationFolder: 'FrontendApplication/FrontendApplication/Assets/' + valueWePluckedFromAppConf
};
并且,在客户端分支下,比如client1,让变量指向一个单独的目标文件夹。当然,在这个分支下,scss 文件和图像以及脚本可能会有所不同:
var globalConfig = {
//valueWePluckedFromAppConf: 'client1',
destinationFolder: 'FrontendApplication/FrontendApplication/Assets/' + valueWePluckedFromAppConf
};
这样,Git 将处理目的地。如果在 master 分支下,我们将发布到 2014-06/,而当我们在 client 分支上时,我们将切换到 client1/。等等。所以 Grunt 会以某种方式读取上面提到的 app.conf,检索目标文件夹的值,然后在那里发布。
当然,我看到的一个问题是我需要切换分支才能访问文件,而且我可能需要切换分支才能将 2014-06/ 和 client1/ 都推送到服务器。当我们有一个新的主要版本时,我们将更改 app.conf,Grunt 将推送到 2015-01/,而不是在一个新的分支/标签下。
以上是我根据上级的要求提出的一个非常粗略和模糊的解决方案。但坦率地说,他和我都对 Grunt 不够熟悉,不知道如何完成上述工作,而且我个人以前从未使用过版本控制前端资产(更不用说自动化流程了),这就是我发布这篇文章的原因。
任何建议将不胜感激,在此先感谢。