0

ここで説明されている usemin(Prepare) を理解するのに問題があります: usemin

私が理解しているのは、usemin を使用すると、多くのファイルを 1 つのファイルとして結合できるということです。これは、JS アプリケーションを構築するときに良い考えです。また、使用方法の流れも理解しています。たとえば、次のようになります。

// simple build task
grunt.registerTask('build', [
  'useminPrepare',
  'concat:generated',
  'cssmin:generated',
  'uglify:generated',
  'filerev',
  'usemin'
]);

次に、このコードがある場合:

<!-- build:js js/app.js -->
<script src="js/app.js"></script>
<script src="js/controllers/thing-controller.js"></script>
<script src="js/models/thing-model.js"></script>
<script src="js/views/thing-view.js"></script>
<!-- endbuild -->

concat タスクは、これらすべてのファイルを app.js と呼ばれる 1 つのファイルに結合し、.tmp フォルダーに配置します。次に、uglify タスクはファイル app.js を .tmp フォルダーから取得し、その中のすべての js を uglify して、dist-folder に配置します。

useminPrepare の前に、元の html (index.html) も dist フォルダーに変換する別のタスクがあったとします。usemin タスクが開始されると、dist フォルダーを使用するように設定されており、生成された app.js への参照で古いブロックを置き換える必要があります。したがって、dist フォルダー内の html では、同じ部分が次のようになります。

<script src="js/app.js"></script>

これは正しいです?では、コメント タグは残っていないはずですか? 現在、useminに関連する問題があります。状況は次のとおりです。最初の html には、次のような usemin タグ内に bower_components ( bower -install ) のコメント タグがあります。

<!-- build:js js/app.js -->
<script src="js/app.js"></script>
<script src="js/controllers/thing-controller.js"></script>
<!-- bower:js -->
<script src="bower_components/something/some_bower_component.js"></script>
<script src="bower_components/something/some_bower_component.js"></script>
<script src="bower_components/something/some_bower_component.js"></script>
<!-- endbower -->
<script src="js/models/thing-model.js"></script>
<script src="js/views/thing-view.js"></script>
<!-- endbuild -->

この設定では、最終的に usemin タスクまですべてがうまく機能しているように見えます。usemin タスクは、コード ブロックを置き換えることができなくなりました。できない理由がわかりました。そこにバワーコメントブロックがあるからです。したがって、最初のタスクを個別に作成し、コードを dist に転送し、それらの bower コメント タグを削除して、残りのタグをビルドに作成すると、すべて正常に動作します。これを解決して、すべてのタスクをまっすぐに実行できるようにしたいと考えています。どうすればこれを解決できますか?コメント ブロックがあると usemin が失敗するのはなぜですか? コメント ブロックを無視するように usemin オプションを変更できますか? または、bower コンポーネントが注入され、html が dist に転送された後に、これらの特定のコメント ブロックを削除する、面倒なタスクを作成する必要がありますか? 私が持っているバージョンは次のとおりです。

"grunt-bower-install": "~0.7.0",
"grunt-concurrent": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-coffee": "~0.7.0",
"grunt-contrib-compass": "~0.6.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-cssmin": "~0.7.0",
"grunt-contrib-htmlmin": "~0.1.3",
"grunt-contrib-uglify": "~0.2.0",
"grunt-usemin": "~2.0.0",
4

1 に答える 1

0

この回答を参照してください: grunt usemin doesn't impact the html file(index.html)

自分でこの問題を抱えていたので、私の解決策は、すべての行末をUNIXスタイルの行末(lf)に変換し、grunt useminによって変換されたファイルでWindowsの行末を避けることでした

于 2015-03-26T13:03:03.560 に答える