我有一个Yeoman项目搭建了“webapp-generator'它包含一个带有嵌套HTML文件的静态网站,类似于以下结构:
-root/
index.html
-directory/
file1.html
-directory2/
file2.html
-js/
(revved .js files)
-css
(revved .css files)
我正在使用usemin
和filerev
任务更新.html文档中的filerevved文件路径。它在js / css / images上正确更新所有文件名,并且它在根index.html
上正常工作。
但是,在嵌套的HTML文件中,它不会替换对正确嵌套路径的引用。
例如。
js/scripts.js
被重命名为js/827385.scripts.js
在 index.html
中 <scripts src="js/scripts.js"></scripts>
解析为:<scripts src="js/827385.scripts.js"></scripts>
但目录/ file1.html 中的(或任何其他嵌套的html文件)
<scripts src="../js/scripts.js"></scripts>
也会转换为:<scripts src="js/827385.scripts.js"></scripts>
忽略 ../
相对路径
有没有办法调整Grunt任务以了解目录中文件的相对深度,以便将相对指示符../
保留在重命名的路径中?。
以下是相关Grunt任务的代码段。
PS:我已经在Stack Overflow问题中跟踪了一些可能的答案:How should I configure grunt-usemin to work with relative path无济于事。
// Renames files for browser caching purposes
rev: {
dist: {
files: {
src: [
'<%= config.dist %>/scripts/{,**/}*.js',
'<%= config.dist %>/styles/{,**/}*.css',
'<%= config.dist %>/images/{,**/}*.*',
'<%= config.dist %>/styles/fonts/{,**/}*.*',
'<%= config.dist %>/*.{ico,png}'
]
}
}
},
// 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
// <%= config.dist %>
useminPrepare: {
options: {
dest: 'out',
// root: '<%= config.app %>'
},
html: '<%= config.app %>/index.html'
// root: '<%= config.app %>'
},
// Performs rewrites based on rev and the useminPrepare configuration
usemin: {
options: {
assetsDirs: [
'<%= config.dist %>',
'<%= config.dist %>/images',
'<%= config.dist %>/styles'
]
},
html: ['<%= config.dist %>/**/*.html'],
css: ['<%= config.dist %>/styles/**/*.css']
},
&#13;
答案 0 :(得分:1)
就我而言,我发现问题是html文件中的usemin配置:
如果你的 index.html 这个usemin指令:
<!-- build:js styles/jquery.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<!-- endbuild -->
在目录/ file1.html 中,您应该尝试在其中使用完整路径:
<!-- build:js /scripts/jquery.js-->
<script src="../bower_components/jquery/dist/jquery.js"></script>
<!-- endbuild-->
将转换为<script src="/scripts/jquery.34ad31c3.js"></script>
。