我有一个grunt项目,它由一个基于generator-webapp
构建的yeoman-generator支持,如果有帮助的话,你可以在GitHub上找到它。
这个grunt项目使用了grunt-usemin
任务。
我的项目涉及构建一个多语言网站,并为了保持整洁,我决定把所有用一种语言写的页面放在以该语言的2字代码命名的文件夹中。
| project/
|--dist/
|----en/
|------index.html
|------404.html
|------...
|----fr/
|------index.html
|------404.html
|------...
这些文件是使用handlebars模板制作的,并且使用assemble
进行处理。在布局中,我有一些usemin
的构建块。
<!-- build:css(.tmp) styles/main.css -->
<link rel="stylesheet" href="../styles/main.css">
<!-- endbuild -->
<!-- build:js scripts/vendor/modernizr.js -->
<script src="../bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
在完美的世界里,这意味着
<link rel="stylesheet" href="../styles/main.css">
<script src="../scripts/vendor/modernizr.js"></script>
但相反展示
<link rel="stylesheet" href="styles/main.css">
<script src="scripts/vendor/modernizr.js"></script>
在我的情况下,这并不是理想的。相关的Gruntfile.js
部分如下所示。
useminPrepare: {
options: {
dest: '<%= yeoman.dist %>'
},
html: [
'<%= yeoman.app %>/fr/{,*/}*.html',
'<%= yeoman.app %>/en/{,*/}*.html'
]
},
usemin: {
options: {
dirs: ['<%= yeoman.dist %>']
},
html: [
'<%= yeoman.dist %>/fr/{,*/}*.html',
'<%= yeoman.dist %>/en/{,*/}*.html'
],
css: ['<%= yeoman.dist %>/styles/{,*/}*.css']
}
我尝试使用basedir
选项,
将其设置为<%= yeoman.dist %>
,并更改构建块。
<!-- build:css(.tmp) ../styles/main.css -->
<link rel="stylesheet" href="../styles/main.css">
<!-- endbuild -->
<!-- build:js ../scripts/vendor/modernizr.js -->
<script src="../bower_components/modernizr/modernizr.js"></script>
<!-- endbuild -->
但不幸的是,无法获得正确的输出。
更具体地说,第一个没有改变任何内容,第二个导致文件夹 scripts
和 styles
的输出层级过高。
| project/
|--app/
|--dist/
|--styles/
|--scripts/
而不是
| project/
|--app/
|--dist/
|----styles/
|----scripts/
有人知道该怎么做吗?这似乎是一个相当简单的用例,但我在Google、GitHub或SO上找不到所需的帮助...