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 -->