我有一个版本号为package.json
的文件,例如:
{
name: "myproject"
version: "2.0"
}
我的目标是将package.json文件中的版本号动态添加到输出文件中。例如,在javascript中,我不想手动更新版本号,但希望在每次构建后生成类似的内容:
/* My Project, v2.0 */
window.myProject = {
version: "2.0"
};
在我的Gruntfile.js配置中,有没有一种简单的方法可以做到这一点?
我实现了: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'),
我认为你只想为页面无法使用浏览器可能拥有的缓存文件设置一些技巧,到目前为止,跨浏览器的唯一方法是在href URL上设置一些东西,比如"app.v2_2.js"或"app.js?ver=22"。所以我使用了这个grunt npm包:
https://www.npmjs.org/package/grunt-cache-breaker
默认情况下,它只向javascript添加一个参数,在大多数情况下,这是不使用缓存所需要的,但即使在其他grunt过程中更改了文件名,也可以进行配置。这只会将HTML标题更改为您想要的内容。
安装grunt缓存破坏程序后,将其添加到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 deploy
我建议在grunt contrib concat 中使用横幅功能
这也可以通过https://github.com/gruntjs/grunt-contrib-uglify-它还负责缩小javascript文件。
filerev现在提供了这个选项。使用process操作文件名,否则该文件名将以文件内容的md5哈希作为后缀。您可以使用它将您的版本插入到所需的每个文件中。
参考编号:https://github.com/yeoman/grunt-filerev
在项目的根目录中创建类似package.json
的内容
它应该读出来,否则你可以做一些类似的事情
pkg: grunt.file.readJSON('package.json'),
因为你会有一个version
声明,它显然对应于<%= pkg.version %>
,所以在json输出中有这个字符串,然后运行grunt.config.process
来进行变量替换
对注释头执行类似操作