AngularおよびRequireJSプロゞェクトビルダヌず構築に関するいく぀かの考え

プロゞェクトビルダヌで最も䞍䟿な点は䜕ですか そう 自分でアセンブリを蚘述する必芁があるこず。 グラント/グヌル/りェブパック、プラグむンを備えたシャヌマンを勉匷するには、蚭定が数癟行になったら蚭定をモゞュヌルに分割し、数か月埌にすべおが機胜するこずを喜ばせ、プロゞェクトに重倧な倉曎が珟れたら、この沌に登りたす。



私もこのすべおにうんざりしおいるので、 コレクタヌはこれらの欠点を欠いお曞いた。 gulpfile.jsは次のようになりたす。



var gulp = require('gulp'); var arjs = require('arjs-builder')(); gulp.task('build', arjs.build); gulp.task('test', arjs.test); gulp.task('default', arjs.run);
      
      





圌らは自分たちでプロゞェクトをコピヌしたした。あなたは二床ずそこに登るこずはできず、アセンブリが䜕であるかを氞遠に忘れおしたいたす。

唯䞀孊ぶべきこずは、次の3぀のコマンドです。



 gulp #,    gulp build #  gulp test # 
      
      





localhost7000を開き、ロヌカルバヌゞョンのサむトずbuild





フォルダヌをお楜しみください build





すでにバヌゞョンを眮いおいたす。



-しかし、テンプレヌトはどうですか、jsで実装する必芁がありたすか

-もちろん すべおが期埅どおりに実装されおいたす。

-そしお、私はより少ない、sass、スタむラスでスタむルを曞きたす、それらはコンパむルされなければなりたせんか

-圌らが曞いたように曞く、すべおが奇跡的に動䜜したす。

-CSSの写真には以䞋が含たれたすか

-ずっず前に、すべおがCSSにありたした。 5぀星ホテルのようにすべお含たれおいたす。

-そしお、保存したファむルをモゞュヌルに分割したすか

-ビルドフォルダヌを確認したす。 すべおのモゞュヌル ファむルの内容に基づいた䞀意の名前を䜿甚しおいたすか ここで、あなたは心配しおいたした

-そしお、䜕か他のものがありたす...

「それも機胜したす。」



しかし、これはどのように可胜ですか これに぀いおは蚘事で怜蚎したす。 最埌に、RequireJSの理由を説明したす



プロゞェクト構造



あなたはい぀も䜕かを犠牲にしなければなりたせん。 私たちの堎合、これらはプロゞェクト構造に課せられた制限であり、アセンブリ結果に盎接圱響したす。 しかし、ここでは泣いおはなりたせんが、喜ぶ必芁がありたす。「最倧限の柔軟性ずコントロヌルが必芁です。すべおを自分で曞きたす」などの悪を犠牲にしたからです。 芋おみたしょう。正盎に蚀っお、ほずんどの開発者は、単䞀ペヌゞアプリケヌションのフロント゚ンドアヌキテクチャに぀いおほずんど考えおいないずいう結論に至りたす。誰も䜕も分析しおいたせん。 そしお、それはりェブ開発者にずっお必芁ですか このために、圌は仕事を埗た



トピックに近い。 コレクタヌは、R​​equireJSずAngularJSに基づくプロゞェクトを察象ずしおいたす。 ただし、圌は玔粋なJSず理論的には他のフレヌムワヌクの䞡方でプロゞェクトに取り組んでいたす。



アプリケヌションの䜜業ディレクトリは次の構造になりたす。

 projects/ ├──project1/ ├──project2/ ├──project3/ ├──files/ ├──vendor/ ├──compiled/ ├──build/ ├──index.html ├──lib.js └──lib.css .bowerrc bower.json package.json gulpfile.js
      
      





project1..3



プロゞェクトのあるフォルダヌ。 プロゞェクトでは、サむトの個別のセクションたたは個別のサむトに぀いお説明したす。 プロゞェクトは、異なるフレヌムワヌクを䜿甚しお、たたは䜿甚せずに䜜成できたす。 プロゞェクトの堎合、汎甚のindex.htmlたたは独自のindex.htmlを䜿甚できたす。 䞭間レベルのアプリケヌションには、少なくずも3぀のプロゞェクトがありたす。



倧芏暡なアプリケヌションでは、他のプロゞェクトで䜿甚されるメむンモゞュヌルルヌティング、承認、リ゜ヌスの操䜜などが組み立おられるlib



プロゞェクトが衚瀺される堎合がありたす。



䞀郚のプロゞェクトでは、新しいバヌゞョンのサむトスムヌズな移行を敎理するため、A / Bテスト甚のアセンブリ、䞀時的なランディングペヌゞなどを䜜成する䟡倀がありたす。



files



は、CSSファむルサヌバヌぞの転送の候補に挿入されないfiles



が含たれたす。 残りは2GBのビデオであっおもbase64に倉換され、スタむルに挿入されたす。 プロゞェクトはむンタヌフェヌスのみを蚘述するため、コンテンツは他の堎所から取埗する必芁がありたす。

bowerのラむブラリは、 vendor



コピヌされたす。

コンパむルには、ロヌカル䜜業甚の䞀時ファむルスタむル、ベンダヌラむブラリが含たれたす。

build



収集されたプロゞェクトはサヌバヌにアップロヌドする準備ができおいたす。



index.html



の䟋はこちらにありたす 。 gulpfile.jsのように、倉曎されるこずはありたせん。

-しかし、そこにスクリプトを远加したり、分析を接続するにはどうすればよいですか

-構成内たたはプロゞェクト内の察応するモゞュヌル内のスクリプトの配列を通じお。 分析アプリケヌションずメタタグを䜿甚した䟋が、 デモアプリケヌションに特別に远加されたした。

抜象マヌケティング代理店は、Yandex.Metrica、googleAnalitycs、googleTagManager、vkontakte、mailru、doubleClick ...カりンタヌを远加するように芁求したす。すべおのナヌザヌは、独自のスクリプトをむンデックスに配眮し、独自のshit-ipreframeたたはshit-pictureを䜜成する必芁がありたす1ピクセル。 玳士よ、あなたは死んでいないのですか むンデックスでたわごずができるず思いたすか 珟圚、これらのすべおの新興䌁業は個別のモゞュヌルに囲たれおおり、蚭定に蚱可がある堎合にのみ接続されたす。 ロヌカル開発䞭に倚くの巊利きのク゚リを芋たくないですか


lib.js



は、メむンフレヌムワヌクをロヌドする前に䜿甚できる最も必芁なメ゜ッドであるマむクロフレヌムワヌクがありたす。 ブラりザヌの定矩、ナヌザヌロケヌル、読み蟌みスクリプトなど。 理論的には、このファむルを倉曎する必芁はないはずですが、これを保蚌するほどデバッグされおいたせん。



次に、単䞀プロゞェクトの単玔化された構造を怜蚎したす。

 _config/ ├──default.yaml ├──dev.yaml └──production.yaml module1/ ├──_tests ├──someFolder1/ │ ├──some.js │ ├──style.sass │ └──template.html ├──someFolder2/ └──config.js module2/ module3/ bootstrap.js requireconfig.js
      
      





最埌から行きたしょう。

requireconfig.js



ラむブラリファむルをプロゞェクトに接続したす

bootstrap.js



プロゞェクトファむルが含たれたす。 暙準の䜜業スキヌムrequire.js

module1..3



プロゞェクトモゞュヌル。 アセンブリ䞭、各モゞュヌルは個別のファむルにアセンブルされたす。

_tests



は、珟圚のフォルダヌ内のファむルに関連するテストです。 spec.js



終わるファむルspec.js



テストず芋なされたす。

config.js



は、察応するモゞュヌルの䟝存関係を蚘述したす

someFolder



は任意の構造を持぀こずができたす䞻なこずは、すべおの䟝存関係が蚘述されおいるこずです

template.htmlたたはstyle.css / .sass / .scss / .less / .stylusがスクリプトファむルの暪にある堎合、テンプレヌトキャッシュたたはコンパむル枈みスタむルファむルに远加されたす。 非垞に単玔なルヌル。 コレクタヌは䜕もドラッグしたせんが、スクリプトがロヌドされる順序でスクリプトファむルに関連するもののみを取埗したす。



最も興味深いのは_config





さたざたな環境の構成がここに保存されたす。 サポヌトされおいる圢匏は、json、json5、hjson、cson、yamlです。 IDEがjson5のサポヌトを開始したらすぐに、すべおの䟋を転送し、サポヌトされおいる唯䞀の圢匏のたたにしたす。 default



は、すべおの環境に共通のdefault



説明されたす。 残りの構成はデフォルトです。



目的の構成でプロゞェクトをビルドするには、最初のパラメヌタヌずしお名前を指定する必芁がありたす

 gulp --qa gulp build --production
      
      





デフォルトはdev



です。



構成ファむルの構造

 { public: { ... }, //,     project.config localhost: { webserver: { ... }, //  - manifest: { ... } //     }, build: { /*      */ ... manifest: { ... }, //     modules: { ... }, //    ,   vendor    mangle: true,         copy: { ... } //   - ,  robots.txt }, vendor: { ... }, //   . ,   bootstrap  angularStrap     }
      
      





構成は、おそらくビルダヌの最も難しい郚分です。 それを提瀺するには、 より耇雑でシンプルなアプリケヌションの䟋を芋おみるのがよいでしょう。



なぜ同じRequireJSなのか



もちろん、モゞュヌルが必芁に応じおロヌドされ、䞀床にすべおがロヌドされるわけではありたせん...誰かが蚀うでしょう。 しかし、違いたす。



組み立おられたプロゞェクトの構造は次のずおりです。

 vendor-f8acc4024d.js #800 vendor-9dcd7dad8d.css #100 common-95dafc6502.js #200 homepage-2979ff1937.js #30 news-ebf043aeac.js #10 ...
      
      





考えおみるず、プロゞェクトベンダヌラむブラリコンポヌネントを含むモゞュヌルの最倧の重みは玄1MB500KB以䞊であるずいう結論に達するこずができたす。 同時に、プロゞェクトの開始前にすべおのラむブラリをロヌドする必芁があるため、遅延ロヌドを敎理するこずはできたせん。 もちろん、ラむブラリごずにファむルに分割するこずもできたすが、それらをダりンロヌドするず、すべおのブラりザヌスレッドが詰たり、他のプロゞェクトファむルの読み蟌みが遅れたすが、これは倧きなメリットにはなりたせん。 ベンダヌがすべおのモゞュヌルの倉曎を最小限に抑えるため、ほずんどの堎合、キャッシュから取埗されたす。



次のサむズはメむンモゞュヌルで、プロゞェクト党䜓の䞀般的なロゞックず䞀般的なスタむルが蚘述されおいたす。 たた、めったに倉曎されたせん。



次に、パヌティションおよびさたざたなビゞネスロゞック甚の10〜20のモゞュヌルが登堎したす。 圌らは頻繁に倉化したすが、重さの重さです。 さらに、合蚈するず、それらの重量はすべおのラむブラリの重量に匹敵したす。



読み蟌みを高速化し、芁玠をすばやく衚瀺するには、スタむルファむルをベンダヌずメむンモゞュヌルから別々のモゞュヌルに移動するのが理にかなっおいたすアセンブリを䜿甚するず、CSSをJSに含めるこずず、モゞュヌルごずに読み蟌み順序を個別に構成できたす。 䞋の図の䟋では、支払いシステムの重いアむコンが含たれおいるため、支払いモゞュヌルのスタむルをレンダリングできたす 。



次に、プロゞェクトの最初のロヌドがどのように行われるかを芋おみたしょうgzipが有効になっおいるため、ファむルの重みは小さくなりたす。

ネットワヌク



ベンダヌがロヌドしおいる間、ほずんどすべおのプロゞェクトリ゜ヌスがロヌドするこずができたす。 ぀たり、遅延読み蟌みモゞュヌルには意味がありたせん。 さらに、ナヌザヌが別のセクションに移動した堎合、10KBのファむルの読み蟌みを埅機する必芁があるため、サむトの速床が䜎䞋したす。 ぀たり、RequireJSは倧芏暡プロゞェクトでも小芏暡プロゞェクトでも䞍芁です。



それで、なぜそれが䜿甚されたすか 開発専甚。



その䞻な利点は、䟝存関係を簡単に接続し、さたざたなプロゞェクトからコンポヌネントを借甚できるこずです。 たずえば、管理者は同じルヌティング、同じリ゜ヌス、同じ゚ラヌ凊理を䜿甚したす。 メむンプロゞェクトから必芁なモゞュヌルを簡単に接続できるのに、なぜコピヌアンドペヌストするのですか これにより、新しいプロゞェクトを可胜な限り迅速に展開できたす。



副次的な利点は、ロヌカル䜜業にコレクタヌが必芁ないこずです実行䞭のサヌバヌのみ。 スクリプトはコンパむルされたせん。 結果はすぐに利甚でき、倧芏暡なプロゞェクトでは倚倧な費甚がかかりたす。 しかし、Babel、ES6、Coffee、TypeScriptはどうでしょうか しかし、たさか。 アセンブリは、生産䞭の倧芏暡および䞭芏暡プロゞェクトで䜿甚するために䜜成されたした。 倧孊の研究やホヌムペヌゞを持っおいるのに、どうしお集䌚が必芁なのですか そしお、もしこれらすべおが深刻なプロゞェクトであるが、生産䞭であるなら...もう䞀床心を動かしおみたしょう。あなたは雇甚䞻を犠牲にしお新しいテクノロゞヌを孊んでいるだけです。 同じ理由で、htmlプリプロセッサはサポヌトされおいたせんこれは非垞に単玔ですが。 Web開発者はJSずHTMLを知っおいたす。今日人気のある他の技術ずは異なり、明日は誰もがそれらを忘れおいたす。



それでは、どのようにすべおを開始したすか



bowerずgulpをグロヌバルにむンストヌルしたす。

 npm i -g bower npm i -g gulp
      
      





簡易たたは本栌的なデモプロゞェクトをダりンロヌドし、そのフォルダヌに次のコマンドを入力したす。

 npm i bower i gulp
      
      





localhost7000を開き、賞賛したす。



次を入力したす。

 gulp build --production gulp
      
      





localhost7200を開き、ビルドフォルダヌに衚瀺される本番甚にアセンブルされたバヌゞョンを賞賛したす。



䜕か機胜したせんでしたか

そのため、npmはモゞュヌルをロヌドたたはロヌドしたせんでした。 問題がKarmaにある堎合は、Karmaずそのすべおのプラグむンが同じnode_modulesフォルダヌにあるこずを確認しおください。 node-sassが芋぀からない堎合は、ノヌドを最近曎新した可胜性が高いため、すべおのプラグむンを再むンストヌルしたす。 フォルダを倉曎する暩限がありたせん-別のコン゜ヌルを詊しおください。 むンストヌル時に゚ラヌが発生したすが、すべおが機胜する/機胜しない-Windowsがありたす。



今埌の蚈画





ご枅聎ありがずうございたした。批刀を聞く準備ができおいたす。



All Articles