3

と にDurandal 2基づくアプリがASP.NET MVC 5ありWeb API、最初のIndex.cshtml( on HomeController) は MVC ルーターを介して提供されます。それ以降は、すべて通常の html ビューが Durandal ルーターによって処理されます。

とにかく、gulp-userrefを使用してすべてcssjsファイルを連結しようとしています。すべてが機能しておりgulp-useref、新しく連結されたファイルとindex.cshtml、更新されたスクリプトとスタイルシートの参照をdistフォルダーにドロップします。

もちろん、アプリケーションが機能するためには、更新index.cshtmlを元に戻す必要がありViews/Home/ます。まさにそれを行う「コピー」タスクを作成しましたgulp。元のファイルを上書きし、連結されたファイルindex.cshtmlへのパスを修正します。 これも同様に機能しますが、連結されたファイルへの参照を挿入する必要がある場所をマークする html コメントを削除するため、プロセスを繰り返すことはできません。 jscss
useref

いくつかのコードで説明しましょう。

Index.cshtmlは持っています:

<html>
   <head></head>
   <body>
      <!-- build:js js/lib.js-->

      <script src="/bower_components/numeral/languages.js"></script>
      <script src="/scripts/bootstrap.js"></script>
      <script src="/scripts/typeahead.js"></script>
      <script src="/scripts/knockout-bootstrap.js"></script>
      <script src="/scripts/knockout-extenders.js"></script>

      <!-- endbuild -->
   </body>
</html>

これはgulp-useref、更新されたスクリプト参照を配置する場所であるため、最終的には次のようになります。

<html>
   <head></head>
   <body>   
      <script src="/js/lib.js"></script>
   </body>
</html>

ご覧のとおりuseref、HTML コメントが削除されるため、元のindex.cshtmlファイルをこのファイルで上書きするuserefと、更新されたスクリプト タグを配置する場所がわかりません。元のファイルを上書きしないindex.cshtmlと、アプリケーションは連結されたファイルを使用しません。

私は初めてなgulpので、完全に間違った方法でこれを行っている可能性がありますが、自動化された方法で連結ファイルを使用していることを確認するにはどうすればよいですか?/Views/Home/index.cshtml

または、代わりに、私がやろうとしていること、つまりすべてを展開の準備をするためのより良いアプローチはありますか?

参考までに、関連するgulpタスクを次に示します。

gulp.task("optimize-for-deployment", function () {
    var assets = $.useref.assets({ searchPath: "./" });
    var cssFilter = $.filter("**/*.css");
    var jsFilter = $.filter("**/*.js");

    return gulp
        .src(config.index)
        .pipe($.plumber())
        .pipe(assets)
        .pipe(cssFilter)
        .pipe($.csso())
        .pipe(cssFilter.restore())
        .pipe(jsFilter)
        .pipe($.uglify())
        .pipe(jsFilter.restore())
        .pipe(assets.restore())
        .pipe($.useref())
        .pipe(gulp.dest(config.appDist));
});

// copy the updated index.cshtml to Views/Home/
gulp.task("copy-for-deployment", ["optimize-for-deployment"], function () {
    return gulp.src(config.appDist + "index.cshtml")
      .pipe($.replacePath(/js\/lib.js/, "/app/dist/js/lib.js"))
        .pipe($.replacePath(/style\/app.css/, "/app/dist/style/app.css"))
        .pipe(gulp.dest(config.indexLocation));
});
4

2 に答える 2

1

これが「より良い」アプローチなのか、それとも最善の解決策なのかはわかりませんが、インデックス ファイルにテンプレートのようなものを使用できます。したがって、タスクで毎回Index-template.cshtml作成するために使用するすべての html コメントを使用できます。Index.cshtmlgulp

Index.cshtmlこのようにして、すべての HTML コメントでテンプレートを 上書きして保持できます。

于 2015-04-12T09:49:38.570 に答える
0

私は.net mvcが初めてで、Sergiとまったく同じことをしようとしています。dist フォルダーを含めるように既定のビューの場所のスキームを変更した場合 ( ASP.NET MVC で既定のビューの場所のスキームを変更する方法は? )、.net は dist フォルダーを含めてそれらの.cshtmlファイルをコンパイルすることを認識しますか?

于 2015-04-15T18:11:06.540 に答える