11

この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、期待どおりの結果が得られません。

そのような状況を処理する理想的な方法は何でしょうか?

4

2 に答える 2

16

wireep の gruntfile.js 構成で、以下を追加します。 ignorePath: '/../../../public'

これにより、wiredep によって作成されたパスの先頭からその部分が削除されます。

たとえば、次のようなものに加えて、構成の調整を行います。

wiredep: {
    target: {
        src: [
            '/Views/**/*.html',
        ],          
        ignorePath: '/../../../public',
        dependencies: true,
        devDependencies: false, 
    }
},
于 2014-07-03T04:22:21.787 に答える
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] を削除しますが、最後の[3]../../はスキップします。../今は残っていますが、 [4]../path/to/file.jsを削除すると、../path/to/file.js

最終的に、私の構成は次のようになります。

wiredep: {
    app: {
        src: [
            "<%= config.app %>/templates/**/*.html"
        ],
        exclude: [
            "modernizr"
        ],
        ignorePath: /^(\/|\.+(?!\/[^\.]))+\.+/,
        devDependencies: true
    }
}

そして、私の 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 -->
于 2014-09-24T19:25:33.683 に答える