grunt-wiedep
任务输出资产的相对路径。我需要绝对路径。
因此,我按照此处的建议重新配置了replace
块:https://github.com/stephenplusplus/grunt-wiredep/issues/46
但是,在按照建议指定replace
块后,我将以下内容添加为我的脚本引用。如你所见,这是错误的。
<script src="/../../../public/vendors/jquery/dist/jquery.js"></script>
<script src="/../../../public/vendors/angular/angular.js"></script>
<script src="/../../../public/vendors/angular-resource/angular-resource.js"></script>
<script src="/../../../public/vendors/angular-route/angular-route.js"></script>
我想要的是这个:
<script src="/vendors/jquery/dist/jquery.js"></script>
<script src="/vendors/angular/angular.js"></script>
<script src="/vendors/angular-resource/angular-resource.js"></script>
<script src="/vendors/angular-route/angular-route.js"></script>
所以,我试过这个替换块。请注意RegEx
:
replace: {
js: '<script src="/{{filePath}}"></script>'.replace(/\.\.\/public/gi, ''),
css: '<link rel="stylesheet" href="/{{filePath}}" />'.replace(/\.\.\/public/gi, '')
}
但似乎{{filePath}}
稍后被替换,因此RegEx
不会产生预期结果。
处理这种情况的理想方法是什么?
答案 0 :(得分:16)
在wiredep的gruntfile.js配置中添加以下内容:
ignorePath: '/../../../public'
这将从wiredep创建的路径的开头删除该部分。
例如类似的内容,以及对配置的任何调整:
wiredep: {
target: {
src: [
'/Views/**/*.html',
],
ignorePath: '/../../../public',
dependencies: true,
devDependencies: false,
}
},
答案 1 :(得分:10)
根据Robert Noack的回答,您可以使用RegEx作为ignorePath
值。我个人使用以下模式来删除相对路径,但保持匹配的最后一个正斜杠,以便最终输出为绝对路径:
/^(\/|\.+(?!\/[^\.]))+\.+/
这是如何工作的:
^ // Start matching at first character in string
(
\/ // [1] Look for "/"
| // OR
\.+ // [2] Look for "." repeated one or more times, followed by
(?! // [3] Don't match
\/[^\.] // "/" followed by a character that is not "."
)
)+
\.+ // [4] Look for remaining "." not including the next "/"
因此,如果我们的输出文件路径是/../../../path/to/file.js
,我们首先删除第一个/
[1],然后删除../../
[2],但跳过最后{{1} } [3]。我们现在离开了../
但我们删除了../path/to/file.js
[4],结果为..
最后,我的配置如下所示:
/path/to/file.js
我的HTML输出如下:
wiredep: {
app: {
src: [
"<%= config.app %>/templates/**/*.html"
],
exclude: [
"modernizr"
],
ignorePath: /^(\/|\.+(?!\/[^\.]))+\.+/,
devDependencies: true
}
}