目前,我有多个角度模块。自定义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
任何帮助或领导都将不胜感激!
答案 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。