我正在用grunt构建一个使用缓存清单的angular应用程序。我的问题是,在将所有js文件串联并缩小为一个文件后,manifest.cfm不会被重写,这使得其中的路径不正确。
这是我的一些Gruntfile.js:
// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
html: '<%= yeoman.app %>/index.html',
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
options: {
dest: '<%= yeoman.dist %>',
flow: {
html: {
steps: {
js: ['concat', 'uglifyjs'],
css: ['cssmin']
},
post: {}
}
}
}
},
// Performs rewrites based on rev and the useminPrepare configuration
usemin: {
html: ['<%= yeoman.dist %>/{,*/}*.html','<%= yeoman.dist %>/{,*/}*.tpl.html', '<%= yeoman.dist %>/views/templates{,*/}*.tpl.html'],
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
options: {
assetsDirs: ['<%= yeoman.dist %>', '<%= yeoman.dist %>/images', '<%= yeoman.dist %>/images/icons-app']
}
},
我知道这个问题有点老,但我只是解决了一些类似的问题,找不到很多答案来帮助我。您最好的选择是继续使用filerev,并使用类似于grunt manifest的grunt清单创建者。您希望文件名在更新(使用filerev)时发生更改,以便清单文件也会发生更改。这是应用程序缓存知道需要更新的唯一方法。
在你安装了grunt清单之后,在你的grunt文件中这样的配置应该能满足你的要求:
manifest: {
generate: {
options: {
basePath: 'app/',
network: ['*'],
preferOnline: true
},
src: [
'scripts/*.js',
'styles/*.css',
'images/*.*',
'views/{,*/}*.html'
],
dest: 'dist/cache.manifest'
}
}
更多信息:http://bnlconsulting.com/blog/the-browser-cache-and-angular
在构建之前,我在manifest.cfm中手工编写了新路径。我不确定是否真的有一种方法可以让它被任何繁重的任务自动重写。
您可以从您的grunt构建任务中注释"filerev"任务。这将省去您在新构建之后的重写。
可能正在坏死此线程,但存在:https://github.com/JoshSchreuder/grunt-manifest-generator
它将扫描给定的html文件,并自动将其中的所有javascript/css/html文件包括在内。