如何从命令行获取Grunt项目的版本号?

4

我想将我的Grunt项目与TeamCity持续集成服务器集成。我需要一种方法来使TeamCity生成的软件包名称包含在项目根目录中的package.json中找到的项目版本号。我似乎找不到提供此功能的Grunt命令,并且正在使用grep。是否有一种未记录的方法可以从命令行获取Grunt项目的版本?

1个回答

3

在 Grunt 中,你可以像这样做:

module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        asciify: {
            project: {
                text: '<%= pkg.name %>',
                options: {
                    font: 'speed',
                    log: true
                }
            }
        }
    });
};

这将把package.json中的名称传递给任何任务,例如grunt-asciify

还有一种方法可以在命令行上获取项目版本,只需在项目根目录中运行npm version即可,它将返回以下内容:

grunt-available-tasks (master) $ npm version
{ http_parser: '1.0',
  node: '0.10.21',
  v8: '3.14.5.9',
  ares: '1.9.0-DEV',
  uv: '0.10.18',
  zlib: '1.2.3',
  modules: '11',
  openssl: '1.0.1e',
  npm: '1.3.11',
  'grunt-available-tasks': '0.3.7' }

最后一个是项目名称和版本。

编辑:关于您的评论,请尝试以下内容:

module.exports = function(grunt) {
    grunt.registerTask('version', 'Log the current version to the console.', function() {
        console.log(grunt.file.readJSON('package.json').version);
    });
}

编辑2:因为Grunt做任何事情时都非常啰嗦,所以我对Grunt的翻译不满意。如果你只想要记录版本而没有其他任何东西,那么请在与package.json相邻的根目录下创建一个名为version.js的新文件。在该文件中粘贴以下内容:

module.exports = function() {
    console.log(require('./package.json').version);
}();

使用node version.js来调用它。我最喜欢这种方法,因为它比Grunt更快速,而且代码也更简洁。祝您使用愉快!


你提供的第二个答案是我目前正在使用的。我希望能找到一个从命令行获取项目版本的Grunt命令,也许我会自己编写一个 :) - hous
1
好的,看到我的更新答案,你可以使用它来完成这个任务。 :) - Ben
谢谢,Ben。这个非常好用。我一直没有成功地抑制输出的杂项内容,例如“Running "version" task”和“Done, without errors.”,所以我可能会在CI服务器上使用sed或类似的东西:grunt version | sed -n 2p - hous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接