ASP.NET 5、問題番号7を準備しおいたすGulpずの連携の詳现

ASP.NET 5のコラムでは、りクラむナの代衚であるDmitry Ubraniansの Dmitry Sikorskyによる出版物を続けおいたす。 この蚘事では、Dmitryが、人気のあるGulpツヌルのASP.NET 5を䜿甚したアプリケヌションシナリオに぀いお詳しく説明しおいたす。 このコラムの以前の蚘事は、 aspnetcolumn -Vladimir Yunevでい぀でも読むこずができたす。
ASP.NET 5以前は、Gulpのようなツヌルを䜿甚したこずがなかったため、このプラットフォヌムで最初のプロゞェクトを䜜成したずきの時間を把握しなければなりたせんでした圓時はただGruntがありたしたが、重芁。 すでに十分に詳现に説明されおいる基本的なこずは行いたせんプロゞェクトには既にGulpfile.jsがあり、Visual Studio 2015のタスク実行マネヌゞャヌを䜿甚しおタスクを実行できるこずを意味したす実際に、Gulpを䜿甚しおASP.NET 5プロゞェクトのすべおを自動化する方法を玹介したす。









この蚘事では、AspNet5GulpizationテストプロゞェクトのGulpfile.jsファむルのフラグメントを提䟛したす 。このプロゞェクトは、完党にhttps://github.com/DmitrySikorsky/AspNet5Gulpizationにありたす 。



゚ントリヌ



新しいwwwrootフォルダヌの甚途をご存知でしょう。 実際、圌女の倖芳では、スクリプト、スタむル、写真を少し新しい方法で芋たした。 ぀たり、サむトのサヌバヌのコヌドのように、゜ヌスず公開の準備ができたオブゞェクトに分けたす。



準備する

aspnetcolumngithub アドバむス すべおを詊すか、GitHub https://github.com/DmitrySikorsky/AspNet5Gulpizationから゜ヌスコヌドをダりンロヌドしおください 。
最初に、タスクで䜿甚するすべおのパッケヌゞをGulpファむルにリストする必芁がありたすそしお、それらがすべおpackage.jsonに存圚するこずを確認しおください。



var gulp = require("gulp"), autoprefixer = require("gulp-autoprefixer"), concat = require("gulp-concat"), del = require("del"), minifyCss = require("gulp-minify-css"), rename = require("gulp-rename"), runSequence = require("run-sequence"), sass = require("gulp-sass"), tsc = require("gulp-tsc"), uglify = require("gulp-uglify");
      
      





さらに、゜ヌスファむルず結果ファむルがすべお1぀の堎所で線集できるように、オブゞェクトの圢匏のパスを衚すず非垞に䟿利です。



 var paths = { frontend: { scss: { src: [ "styles/*.scss" ], dest: "wwwroot/css" }, ts: { src: [ "scripts/*.ts" ], dest: "wwwroot/js" } }, shared: { bower: { src: "bower_components", dest: "wwwroot/lib" } } }
      
      





最埌に、すべおのスクリプトずスタむルを再構築し、それらを凊理しお、結果のフォルダヌにコピヌするメむンのGulpタスクに぀いお説明したす。



 gulp.task( "rebuild", function (cb) { runSequence( "clean", "build", "minify", "delete-unminified", "rename-temp-minified", "delete-temp-minified", cb ); } );
      
      





runSequenceパッケヌゞを䜿甚するず、タスクを次々ず順番に実行できたす。この堎合、これは非垞に重芁です。 たた、cbコヌルバック関数をシヌケンスの最埌のタスクずしお枡しお、呌び出しコヌドにプロセス党䜓の完了を通知できるようにしおください。



ちなみに、手動で再構築タスクを実行しないようにするには、プロゞェクトをビルドたたは開くずきにスタゞオに匷制的に実行させるか、Gulpファむルに盎接別のタスクを远加しプロゞェクトを開くずきに自動的に実行、リスナヌを蚭定しお゜ヌスファむルを倉曎し、そのような倉曎が怜出されたらタスクを完了したす。



スクリプト



私は、そのシンプルさず優雅さでJavaScriptを本圓に愛したしたそしおこれからもそうです。 珟圚、TypeScriptも倧奜きです。 これは玠晎らしいツヌルです。泚意するこずをお勧めしたす。通垞、すべおのtsファむルをScriptsフォルダヌに保存したすが、プロゞェクトの公開時には無芖されたす。 これらは、クラむアントスクリプトの゜ヌスコヌドです。 最初にTypeScriptをJavaScriptにコンパむルし、それを圧瞮しおから1぀のファむルに接着し、最終的に結果ファむルをwwwroot / jsフォルダヌにコピヌしお、アプリケヌションで䜿甚するタスクをGulpファむルに蚭定したす。 TypeScriptを䜿甚しおいない堎合は、単にJavaScriptに倉換する手順をスキップできたす。残りのタスクは倉曎せずに動䜜したす。



既定では、Visual Studio 2015は保存時にtsファむルをコンパむルし、結果のjsファむルを同じフォルダヌに配眮したす。 この動䜜は必芁ないため、プロゞェクト蚭定でTypeScriptコンパむルを無効にしたす。



TypeScriptをコンパむルするゞョブは次のようになりたす。



 gulp.task( "frontend:build-ts", function (cb) { return gulp.src(paths.frontend.ts.src) .pipe(tsc()) .pipe(gulp.dest(paths.frontend.ts.dest)); } );
      
      





そのため、結果のJavaScriptを圧瞮しお、1぀の結果ファむルに貌り付けるこずができたす。



 gulp.task( "frontend:minify-js", function (cb) { return gulp.src(paths.frontend.ts.dest + "/*.js") .pipe(uglify()) .pipe(concat("aspnet5gulpization.min.js.temp")) .pipe(gulp.dest(paths.frontend.ts.dest)); } );
      
      





倚くのjsファむルを1぀に貌り付けるず、結果のファむルに間違った順序で远加され、定矩が呌び出し埌に配眮されるため、定矩されおいないずいうメッセヌゞが衚瀺される可胜性がありたす。 これが発生した堎合、結果ファむルのスクリプトの順序を手動で簡単に蚭定できたす。 最初に埓う必芁があるスクリプトを必芁な順序でリストするこずもでき、配列の最埌の芁玠ず同じフォルダを瀺すだけで、Gulpは明瀺的に指定されたファむルを最初にフォルダから凊理し、残りをすべお凊理する必芁があるず掚枬したす。



ちなみに、NPMパッケヌゞを埩元する際に゚ラヌメッセヌゞが突然衚瀺される堎合オプションで、切断された䞀連の文字で構成される文蚀を䜿甚、たたはパッケヌゞを埩元しようずするずVisual Studio 2015が単にクラッシュする堎合、これはファむルシステム内のプロゞェクトのネストの深さによる可胜性がありたす。 䞀郚、これに関する情報はここで芋぀けたした https : //github.com/Microsoft/nodejstools/issues/336 少し時間を費やした埌、少ないサブフォルダヌに空のプロゞェクトを䜜成し、そこにpackage.jsonをコピヌし、そこに埩元したしたパッケヌゞし、node_modulesフォルダヌず共にプロゞェクトに転送したす。 たた、スタゞオの厩壊䞭に、砎損したパッケヌゞがnpm-cacheフォルダヌに入る可胜性があるため、これを念頭に眮いお、必芁に応じおそこから削陀する必芁がありたす。



スタむル



最近では、SCSSを詊すこずにしたした。 䞻な目暙は、怜玢ず眮換を䜿甚するのではなく、色などを1か所で線集できるようにするこずでした。 たた、巚倧なcssファむルを耇数の郚分に分割するこずは玠晎らしいこずであるず刀断したした。それにより、それらを䌎うのがより䟿利になりたす私の意芋では、ポむ捚おを避けながらスタむルを䌎うこずは非垞に困難です。䞀目で必ずしも明らかではありたせん。 SCSSを䜿甚するず良い結果が埗られたした。



TypeScriptず同様に、私のGulpファむルには、SCSSをCSSにコンパむルし、ベンダヌプレフィックスを远加し、結果ファむルをwwwroot / cssフォルダヌに圧瞮、接着、コピヌするタスクが含たれおいたす。



CSSでのSCSSのコンパむルは次のずおりです。



 gulp.task( "frontend:build-scss", function (cb) { return gulp.src(paths.frontend.scss.src) .pipe(sass()) .pipe(gulp.dest(paths.frontend.scss.dest)); } );
      
      





さお、圧瞮、接着ベンダヌプレフィックスの同時配眮



 gulp.task( "frontend:minify-css", function (cb) { return gulp.src(paths.frontend.scss.dest + "/*.css") .pipe(minifyCss()) .pipe(autoprefixer("last 2 version", "safari 5", "ie 8", "ie 9")) .pipe(concat("aspnet5gulpization.min.css.temp")) .pipe(gulp.dest(paths.frontend.scss.dest)); } );
      
      





図曞通



たずえば、ASP.NET 5プロゞェクトでjQueryが必芁な堎合は、ほずんどの堎合Bowerを䜿甚しおダりンロヌドしたす。以前に䜿甚したNuGetずは異なり、jquery.min.jsファむルず2぀以䞊のファむルを取埗したす。その他。 jqueryフォルダヌはbower_componentsフォルダヌに䜜成されたす。このフォルダヌには、䞊蚘のファむルに加えお、ラむブラリの非圧瞮バヌゞョンずその゜ヌスがありたすもちろん、公開䞭は無芖されたす。



考えおみれば、これらのラむブラリを少なくずも2぀の方法で䜿甚できたす。



たず、jquery.min.jsファむルを最初にwwwroot / lib / jqueryフォルダヌにコピヌしお、ペヌゞに接続するだけです。 それは私がやったこずですGoogle Hosted Librariesのようなサヌビスをより正確に䜿甚するこずはできたせん。そのため、ブラりザは別のサむトにアクセスするずきに、ダりンロヌドするのではなく、ラむブラリオプションをキャッシュしたすが、ほずんどの堎合はそうしたせん。



次に、ラむブラリの非圧瞮バヌゞョンjquery.jsを取埗し、アプリケヌション内の他のスクリプトが凊理されるのず同じ方法で凊理できたす。 ぀たり、結果ずしお、単䞀の共通jsファむルに远加し、Webサヌバヌぞのリク゚ストの数を枛らしたす。



3぀のラむブラリに必芁なファむルをコピヌするタスクは次のずおりです。



 gulp.task( "lib-copy", function (cb) { var lib = { "/jquery": "/jquery/dist/jquery*.{js,map}", "/jquery-validation": "/jquery-validation/dist/jquery.validate*.js", "/jquery-validation-unobtrusive": "/jquery-validation-unobtrusive/jquery.validate.unobtrusive*.js" }; for (var $package in lib) { gulp .src(paths.shared.bower.src + lib[$package]) .pipe(gulp.dest(paths.shared.bower.dest + $package)); } cb(); } );
      
      





結論



私は結果が奜きです。 スタむルずスクリプトを簡単か぀䟿利に操䜜し、公開前にそれらを簡単か぀䟿利に最適化しお、プロセスを完党に制埡できるこずが気に入っおいたす。 もちろん、これはGulpが支揎できる唯䞀の方法ではありたせんが、その機胜を完党に理解するにはこれで十分だず思いたす。



著者向け



ご友人、ご自身の資料でコラムをサポヌトするこずに興味がある堎合は、すべおの詳现を議論するためにvyunev@microsoft.comたでご連絡ください。 ASP.NETおよびその他のトピックに぀いお興味深い話ができる著者を探しおいたす。



著者に぀いお



シコルスキヌ・ドミトリヌ・アレクサンドロノィチ

Ubrainians Companyhttp://ubrainians.com/

オヌナヌ、マネヌゞャヌ

ドミトリヌシコルスキヌ



All Articles