动态地将版本号添加到目标输出文件w / grunt

时间:2013-12-07 04:33:40

标签: javascript node.js gruntjs

我有一个package.json文件,其中包含我们的版本号,例如:

{
    name: "myproject"
    version: "2.0"
}

我的目标是将package.json文件中的版本号动态添加到输出文件中。例如,在javascript中我不想手动更新版本号,但是想要在每次grunt构建之后生成类似的东西:

/* My Project, v2.0 */
window.myProject = {
    version: "2.0"
};

在我的Gruntfile.js配置中有一种简单的方法吗?

6 个答案:

答案 0 :(得分:50)

我实施了:https://github.com/erickrdch/grunt-string-replace

在我的源css / js文件中,我使用的文本{{ VERSION }}将替换为package.json文件中设置的版本号。以下是我添加到Gruntfile.js的配置。

'string-replace': {
  version: {
    files: {
      // the files I did string replacement on
    },
    options: {
      replacements: [{
        pattern: /{{ VERSION }}/g,
        replacement: '<%= pkg.version %>'
      }]
    }
  }
},
pkg: grunt.file.readJSON('package.json'),

答案 1 :(得分:11)

我认为你只想做一些技巧,让页面无法使用浏览器可能拥有的缓存文件,到目前为止,这种跨浏览器的唯一方法是放置一些东西。 href urls喜欢&#34; app.v2_2.js&#34;或&#34; app.js?ver = 22&#34;。所以我使用这个笨蛋的npm包:

https://www.npmjs.org/package/grunt-cache-breaker

默认情况下,它只会为您的javascript添加一个参数,在几乎所有情况下都是不使用缓存所需的内容,但即使您在其他grunt进程中更改了文件的名称,也可以进行配置。这只会将HTML标题更改为您想要的内容。

安装grunt-cache-breaker后,将其添加到GruntFile:

// Append a timestamp to 'app.js', 'controllers.min.js' which are both located in 'index.html'
// resulting in the index the call of : href="~/app.js?rel=1415124174159"...
        cachebreaker: {
            dev: {
                options: {
                    match: ['app.js', 'styles.css']
                },
                files: {
                    src: ['dist/index.html']
                }
            }
        },

然后加载模块:

grunt.loadNpmTasks('grunt-cache-breaker');

添加您想要的任务:

grunt.registerTask('deploy', [
        'clean:app',
        'copy:views',
        'copy:imgs',
        'copy:css',
        'uglify:app',
        'cssmin:app',
        'cachebreaker:dev'
    ]);

最后在控制台/命令提示符下运行grunt动作

> grunt deploy

答案 2 :(得分:2)

我建议使用grunt-contrib-concat

中的横幅功能

答案 3 :(得分:2)

这也可以使用https://github.com/gruntjs/grunt-contrib-uglify的横幅选项完成 - 这也需要关注javascript文件的微小化。

答案 4 :(得分:0)

filerev现在提供此选项。使用进程来操作文件名,否则将使用文件内容的md5哈希作为后缀。您可以使用它将您的版本插入到您想要的每个文件中。

参考:https://github.com/yeoman/grunt-filerev

答案 5 :(得分:-1)

在项目的根目录中创建类似package.json的内容

它应该读取或你可以做类似的事情

pkg: grunt.file.readJSON('package.json'),

因为你将有version声明显然对应于<%= pkg.version %>所以在你的json输出中有这个字符串,然后运行grunt.config.process来做变量替换

为评论标题执行类似操作

相关问题