如何从Grunt任务增加Cordova中的项目版本?

时间:2014-09-10 06:19:55

标签: cordova gruntjs version

好的,首先,我的NodeJS和Grunt Fu可能缺乏,所以如果有一个“明显而简单”的答案,请原谅我。

所以基本上我正在使用Grunt,Yeoman和AngularJS Generator以及Cordova。

基本构建设置正常并且工作正常,这意味着我可以运行grunt build,并将结果融入cordova构建中(通过使用cordova CLI仍未记录的--link-to功能)。

嗯,好。 现在我正在尝试做的是添加一个可以增加项目版本的繁琐任务,并将其拉入到cordova端的config.xml(从它进入平台构建的地方 - 至少用Android)。

所以我找到了grunt-bump,并设法让它正常运行。

现在我需要以某种方式获取更新后的版本号(在grunt bump完成之后),并将其注入Cordova config.xml

我看过grunt-cordova-config,这可能有用,但这项任务似乎目前已被打破。我在github上打开了一个关于它的issue

所以......有人对这是怎么做的?

或者是否存在完全不同的方法(我喜欢bump完成提交,标记和推送的事情......)?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个旧线程,但我有同样的问题,并创建了一个powershell脚本,虽然我正在使用它为cordova构建它可以适应工作所以它需要版本1.1.1.2并将其增加到1.1.2.2并开始构建。

   #Get Current Version
[xml]$myXML = Get-Content C:\YOURAPP\config.xml
$myXML.widget.version
$oldVersion = $myXML.widget.version
$splitVersion = $oldVersion.Split(".")
#Set Current Version to increment by 1
$newVersion = ([int]$splitVersion.Item(2) + 1)
$oldVersion = $oldVersion.Remove(4,1)
$oldVersion = $oldVersion.Insert(4,$newVersion)
#Set new value
$myXML.widget.version = $oldVersion
#Save changes
$myXML.Save("C:\YOURAPP\config.xml")
#Go to cordova folder
cd C:\YOURAPP
#Build App
cordova build android

希望这有助于某人:)

答案 1 :(得分:0)

好的,因为似乎没有人愿意咬人,所以我就是这样做的。

首先,使用yeoman angularJS生成器设置您的项目(模糊地),使用--link-to选项设置cordova。

其次,为项目添加和配置grunt-bump

然后在copy任务中添加一个部分(我希望它存在,如果没有,请点击链接并添加)

cordovaConfig: {
            src: 'app/config.cordova.xml',
            dest: '../cordova/config.xml',                  
            options: {
                process: function (content, srcpath) {  
                    /*
                    * Ok, I will be the first to admit that this is HORRIBLY inefficient,
                    * BUT it works. Which is more than I can say for other approaches I tried.
                    */
                    var locPkg = grunt.file.readJSON('package.json');
                    grunt.log.write ('new version ' +locPkg.version );
                    var deVersion = 'version="' + locPkg.version + '"';
                    return content.replace(/version="\d+\.\d+\.\d+"/,deVersion);
                }
            }
        }

为了获得额外的强大功能,请注册一个新的grunt任务:

 grunt.registerTask('release', [
    'bump',
    'copy:cordovaConfig'
  ]);

然后你可以运行grunt release,并在所有正确的位置升级版本;)