Gruntjs 使用grunt wiredep的绝对路径用于grunt+;凉亭
Gruntjs 使用grunt wiredep的绝对路径用于grunt+;凉亭,gruntjs,bower,bower-install,grunt-wiredep,wiredep,Gruntjs,Bower,Bower Install,Grunt Wiredep,Wiredep,grunt wiedep任务输出资产的相对路径。相反,我需要绝对路径。 因此,我重新配置了replace块,如下所示: 但是,在按照建议指定replace块之后,我将添加以下内容作为脚本引用。正如你所看到的,这是错误的 <script src="/../../../public/vendors/jquery/dist/jquery.js"></script> <script src="/../../../public/vendors/angular/angular.
grunt wiedep
任务输出资产的相对路径。相反,我需要绝对路径。
因此,我重新配置了replace
块,如下所示:
但是,在按照建议指定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>
但是,{{filePath}
似乎在稍后被替换,因此,RegEx
不会产生预期的结果
处理这种情况的理想方法是什么?在wiredep的grunfile.js配置中添加以下内容:
ignorePath:'/../../../public'
这将从wiredep创建的路径开始处删除该零件
例如,类似这样的内容,再加上对配置的任何调整:
wiredep: {
target: {
src: [
'/Views/**/*.html',
],
ignorePath: '/../../../public',
dependencies: true,
devDependencies: false,
}
},
基于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],然后删除./../../code>[2],但跳过最后一个./
[3]。我们现在只剩下。/path/to/file.js
,但是我们删除了。
[4],结果是/path/to/file.js
最后,我的配置如下所示:
wiredep: {
app: {
src: [
"<%= config.app %>/templates/**/*.html"
],
exclude: [
"modernizr"
],
ignorePath: /^(\/|\.+(?!\/[^\.]))+\.+/,
devDependencies: true
}
}
wiredep:{
应用程序:{
src:[
“/templates/***.html”
],
排除:[
“现代化者”
],
信号路径:/^(\/\.+(?!\/[^\.])+\.+/,,
devDependencies:正确
}
}
我的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 -->
###之前##
##之后##
没错,忽略路径将从模板中排除
wiredep: {
app: {
src: [
"<%= config.app %>/templates/**/*.html"
],
exclude: [
"modernizr"
],
ignorePath: /^(\/|\.+(?!\/[^\.]))+\.+/,
devDependencies: true
}
}
## 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 -->