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

Manage AngularJS modules version and releases using Grunt

本文关键字:版本 模块 Grunt 管理 AngularJS 使用      更新时间:2023-09-26

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

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

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

因此,每个模块都构建在目录*/dist/my-module/1.0.0/中

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


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


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

编辑:关于该问题的新问题,请参阅使用Grunt 在SVN上创建特定版本号


任何帮助或线索都将不胜感激!

第一个问题

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

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

下面是ng常量任务的结果:

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():如何仅在模块内部定义常量?


第二个问题

我问了另一个问题,更确切地说,关于这个问题:使用Grunt在SVN上创建一个特定的版本号。