Moo*_*oon 11 gruntjs bower bower-install grunt-wiredep wiredep
该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>
Run Code Online (Sandbox Code Playgroud)
我想要的是这样:
<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>
Run Code Online (Sandbox Code Playgroud)
所以,我尝试了这个替换块.注意RegEx
:
replace: {
js: '<script src="/{{filePath}}"></script>'.replace(/\.\.\/public/gi, ''),
css: '<link rel="stylesheet" href="/{{filePath}}" />'.replace(/\.\.\/public/gi, '')
}
Run Code Online (Sandbox Code Playgroud)
但它似乎{{filePath}}
在以后被替换,因此RegEx
不会产生预期的结果.
处理这种情况的理想方法是什么?
Rob*_*ack 16
在wiredep的gruntfile.js配置中添加以下内容:
ignorePath: '/../../../public'
这将从wiredep创建的路径的开头删除该部分.
例如,像这样的东西,加上你的配置调整:
wiredep: {
target: {
src: [
'/Views/**/*.html',
],
ignorePath: '/../../../public',
dependencies: true,
devDependencies: false,
}
},
Run Code Online (Sandbox Code Playgroud)
小智 10
基于Robert Noack的答案,您可以使用RegEx作为您的ignorePath
价值.就个人而言,我使用以下模式来删除相对路径但保持匹配的最后一个正斜杠,以便最终输出将是一个绝对路径:
/^(\/|\.+(?!\/[^\.]))+\.+/
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
^ // 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 "/"
Run Code Online (Sandbox Code Playgroud)
因此,如果我们输出的文件路径是/../../../path/to/file.js
,我们先删除第一个/
[1],然后删除../../
[2],但跳过最后一个../
[3].我们现在离开了../path/to/file.js
,然后我们删除..
[4]导致/path/to/file.js
最后,我的配置如下所示:
wiredep: {
app: {
src: [
"<%= config.app %>/templates/**/*.html"
],
exclude: [
"modernizr"
],
ignorePath: /^(\/|\.+(?!\/[^\.]))+\.+/,
devDependencies: true
}
}
Run Code Online (Sandbox Code Playgroud)
我的HTML输出如下:
## BEFORE ##
<!-- build:js(.) assets/vendor/vendor.js -->
<!-- bower:js -->
<script src="../../../bower_components/jquery/dist/jquery.js"></script>
<script src="../../../bower_components/jquery-waypoints/waypoints.js"></script>
<script src="../../../bower_components/holderjs/holder.js"></script>
<!-- endbower -->
<!-- endbuild -->
## AFTER ##
<!-- build:js(.) assets/vendor/vendor.js -->
<!-- bower:js -->
<script src="/bower_components/jquery/dist/jquery.js"></script>
<script src="/bower_components/jquery-waypoints/waypoints.js"></script>
<script src="/bower_components/holderjs/holder.js"></script>
<!-- endbower -->
<!-- endbuild -->
Run Code Online (Sandbox Code Playgroud)