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

Eri*_*ria 8 javascript angularjs gruntjs

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

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

{
    "name": "my-module",
    "version" : "1.0.0",
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

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

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


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


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

编辑:有关此问题的新问题,请参阅使用Grunt在SVN上Bump特定版本号


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

Eri*_*ria 1

第一个问题

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

{
    "name": "my-project",
    "version" : "1.0.0",
    "moduleName": "myModuleName"
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

当心!我惊讶地将其应用于同一页面上的多个模块:如果在两个不同的模块上声明具有相同名称的常量,则前者的值将被后者覆盖。 AngularJS module.constant() :如何仅在模块内定义常量?


第二个问题

关于这个问题,我问了另一个更精确的问题:使用 Grunt 在 SVN 上碰撞特定版本号