使用Grunt管理AngularJS模块版本和发行版

时间:2016-01-05 13:23:10

标签: javascript angularjs gruntjs

目前,我有多个角度模块。自定义Grunt任务进行连接,缩小并打包每个模块,以便可以部署。我还没有做的唯一事情是管理这些模块的版本。

每个项目(每个模块一个)包含一个package.json文件,其中我声明了组件的名称和版本:

{
    "name": "my-module",
    "version" : "1.0.0",
    // etc.
}

所以每个模块都建在一个目录* / dist / my-module / 1.0.0 /

但是,在模块本身,我需要访问它的版本。例如,在控制器中,我声明了一个变量$scope.version = '1.0.0'。但是目前,它在控制器脚本中是硬编码的。

第一个问题,有没有办法让模块从package.json文件中获取版本?或者构建应用程序的grunt任务用模块的当前版本替换脚本中的给定标志? (例如,我可以声明我的变量$scope.version = 'FLAG_VERSION'知道在构建期间grunt将用正确的值替换标志)

第二个问题,是否有一些grunt组件允许在我的VCS(例如SVN)中标记模块的当前版本,然后增加当前版本?简而言之,执行模块的发布。

修改:就此问题提出了新问题,请参阅Fail The Build Jenkins Plugin

任何帮助或领导都将不胜感激!

1 个答案:

答案 0 :(得分:1)

第一个问题

我在我的grunt构建中添加了一个 grunt-ng-constant 任务(谢谢@Joe)来从package.json文件生成角度常量。它工作得很好,我现在可以将它们注入我的指令和服务中。我不得不将模块名称添加到我的package.json中,因为ng-constant任务需要它来识别生成的常量的模块。在package.json中声明的名称更像是项目名称,而不是模块名称。

{
    "name": "my-project",
    "version" : "1.0.0",
    "moduleName": "myModuleName"
    // etc.
}

在ng-constant任务的结果下面:

angular.module('myModuleName')
.constant('appInfo', {name:'my-project',version:'1.0.0'})   
;

我改变了我的grunt构建任务,以便在缩小之前在我的应用程序脚本的末尾连接这个生成的脚本。所以现在我可以在服务中使用appInfo,例如:

angular.module('myModuleName').service('myService', [ ..., 'appInfo', function( ..., appInfo ){
    // I can use appInfo.name and appInfo.version here !
}
  

小心!我很惊讶地将它应用于同一页面上的几个模块:如果在两个不同的模块上声明了一个具有相同名称的常量,则前者的值将被覆盖后者。   AngularJS module.constant() : how to define a constant inside a module only?

第二个问题

我更准确地问了另一个问题:Bump a specific version number on SVN using Grunt