我有一个package.json
文件,其中包含我们的版本号,例如:
{
name: "myproject"
version: "2.0"
}
我的目标是将package.json文件中的版本号动态添加到输出文件中。例如,在javascript中我不想手动更新版本号,但是想要在每次grunt构建之后生成类似的东西:
/* My Project, v2.0 */
window.myProject = {
version: "2.0"
};
在我的Gruntfile.js配置中有一种简单的方法吗?
答案 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哈希作为后缀。您可以使用它将您的版本插入到您想要的每个文件中。
答案 5 :(得分:-1)
在项目的根目录中创建类似package.json
的内容
它应该读取或你可以做类似的事情
pkg: grunt.file.readJSON('package.json'),
因为你将有version
声明显然对应于<%= pkg.version %>
所以在你的json输出中有这个字符串,然后运行grunt.config.process
来做变量替换
为评论标题执行类似操作