我在使用yeoman/grunt和usemin时经历了可怕的时光-当我有子文件夹时,试图在将正确的路径写入html的同时使输出文件正常工作。
我的基本设置是在子文件夹(en,de,fr等)中有顶级页面(例如index.html)和特定于语言的页面-每个页面都有通用的js文件(如jquery),但也有特定于语言的js文件(与CSS相同,但保持简单...)
– Gruntfile.js
– app
|– index.html
|– js
jquery.js
|– en
english.js
|– de
german.js
|– css
|– en
|– index.html
|– de
|– index.html
– dist
因此,基本上-有一个带有jquery等的顶级index.html-因此那里的script标签可能看起来像
<script src="js/jquery.js"></script>
或带转
<script src="js/123.jquery.js"></script>
但是在en/index.html中,脚本标记应类似于
(对于常见的-如jquery)
<script src="../js/jquery.js"></script>
或带有转速
<script src="../js/123.jquery.js"></script>
麻烦的是../。
我可以构建js文件,但不能构建,但不能修订,或者可以修订,但是为空,或者可以构建和修订,但是在错误的位置(通常在app和dist文件夹的外部/上方)!
在en/index.html中-我无法确定build:js的外观
例如。
<!-- build:js js/jquery.js -->
<script src="../js/jquery.js"></script>
<!-- endbuild -->
<!-- build:js js/en/english/jquery.js -->
<script src="../js/en/english.js"></script>
<!-- endbuild -->
我已经尝试了所有我能想到的组合-似乎归结为如果我在build:js路径中写了一个../,那么实际文件位于app文件夹的上一级,但是将路径写在正确的HTML。如果我将../留在外面,它会将文件放在正确的位置,但是html都没有../(这显然是需要的)-那么我怎么说我希望输出文件向上引用一级(在en/文件夹之外),但请注意不要将其向上一级(在dist文件夹之外!)
谢谢!
最佳答案
我遇到了一个非常相似的问题。我使用他们的静态网站选项将我的grunt生成的网站托管在S3上。在本地,usemin生成的内容运行良好(具有绝对路径),但是由于我将站点放在S3的存储桶中,因此它需要 Assets 文件的完整绝对路径(具有域)才能实际运行。
输入grunt-replace。使用搜索/替换模式是我发现实际完成此操作的唯一方法。对我来说,我只需要用“http://s3domain.com/bucket/site-name/assets/”替换“/assets/”即可。这是我艰苦的任务定义:
replace: {
dist: {
options: {
patterns: [
{
match: /\/assets\//,
replacement: 'http://s3domain.com/bucket/site-name/assets/'
}
]
},
files: [
{
expand: true,
src: ['dist/**/*.html']
}
]
}
}
我已将其添加到
deploy
任务中,以便仅在即将推送至S3之前运行。对于您的情况,您可以让
usemin
来做它的事情,然后仅替换子目录中的文件(例如en
或es
),然后更改 Assets 路径以在它们之前添加../
。
关于path - Yeoman/Grunt Usemin子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346022/