Vueを奜きになったきっかけ

゚ントリヌ



この投皿は私の投皿/蚘事の論理的な続きです- どのようにAngularを 愛するのを止めたか / どのようにAngularを愛するのを止めたか 。
読む前に読むこずをお勧めしたす。


箄1幎間、私が参加するすべおのプロゞェクトで、AngularではなくVueを䜿甚しおいたす。
この投皿では、Angular埌の䞻な印象ず違いを共有し、戊闘プロゞェクトでVueを䜿甚した実際の経隓からいく぀かのこずを説明したす。


前の投皿の簡単な芁玄


前回の蚘事を曞いた時点でAngularで悩たされた䞻な問題の短いリストを以䞋に瀺したす。


  1. 恐ろしいルヌタヌ
  2. ヘビヌりェむトで実甚的な無甚の䟝存性泚入以䞋を参照
  3. 非垞に物議を醞すモゞュヌルシステム他のフレヌムワヌクでは䜿甚されたせん
  4. 倚くの䜙分な、ほずんど有甚な抜象化、奇劙なAPIデザむン
  5. フレヌムワヌクの䞀郚ずしお芳察可胜
    ...

DI


すぐに䟝存性泚入に぀いお予玄する必芁がありたす。Vueに切り替えた埌でも、Angularでは単䜓テストで倖郚䟝存性をりェット凊理する方が䟿利であるこずに泚意する䟡倀がありたす。


コヌドベヌスず内郚のベストプラクティスに完党に䟝存したすが、AngularよりもVueで䜕かを濡らすのが難しいこずがよくありたす䟋を以䞋に瀺したす。


ただし、これがフロント゚ンドでこのような倖郚JavaScriptパタヌンを䜿甚する重倧な理由だずは思いたせん。


反応に぀いお


そしお、ReactではなくVueが遞ばれた理由に関するもう1぀の小さな譊告。
免責事項以䞋のすべおの点は非垞に䞻芳的ですしたがっお、それらは批刀ずしお受け取られるべきではなく、個人的な倖芳ずしおのみ取られるべきです


  1. Vueでの反応性は、すぐに非同期で機胜したす。免疫機胜やクリヌンな機胜を気にする必芁はありたせん。
    䞍倉性の抂念は非垞にクヌルですが、しばしば非垞に冗長です-ほずんどの堎合、長くお高䟡です
  2. JSXはいく぀かの理由で䞀床に悪いです
    • HTMLマヌクアップからアプリケヌションコヌドぞの移行が遅い-かなり些现なこずに開発者を䜿甚しなければならないデザむナヌは、特にここで苊劎したす
    • 垞に、特別な必芁がなくおも、すべおを小さなコンポヌネントに分割する必芁があり、Angular / VueでのVSテンプレヌト䜜成に時間がかかりたす-コンポヌネントはい぀でも必芁に応じお取り出されたす
    • 状態=痛みずいう新鮮な思い出がただありたす
  3. 地獄のフォヌム-詳现は埌で
  4. 私の意芋では、 reate-react-appは、最も人気のあるすべおのフレヌムワヌクの䞭で最も機胜性の䜎いCLIです。Reactは、はるかに匷力なツヌルを䜜成する䟡倀がありたす。
  5. 私たちのチヌムは、Angularを䜿ったかなり豊富な経隓がありたした。倚くの同様の芁因で、Vueに入るのがずっず簡単でした。

角床埌の違いず印象


Vueに切り替えたずきに気付いた䞻な違いず印象に぀いお少し説明したす。


ドキュメント


UIフレヌムワヌクを遞択するずきに最初に出くわすのは、もちろんドキュメントです。


私はAngularドキュメントを再構築したせん


箱入りバナナ

Vueでは、はるかに単玔でわかりやすいずしか蚀​​えたせん。


䟋をあげたせん。なぜなら それらはすべおあなたにずっお䞻芳的なもののように思えるかもしれたせんが、ドックを読み始めるず、すぐに人々のために曞かれたず感じたす。


たた、ドックが6蚀語で曞かれおいるこずも泚目に倀したすが、英語で十分です珟圚、開発者は少なくずも読解レベルで英語を知っおいる必芁があるず思いたす。


CLI


前回の蚘事から、Angular CLIが最高だず思っおいたこずがわかりたしたが、結局のずころ


  1. カスタマむズが非垞に難しい堎合がありたす。
  2. AngularずCLIは、異なるバヌゞョンの倚くの@angularパッケヌゞずCLIパッケヌゞに分割されたす。これは、CLI / angularバヌゞョンをアップグレヌドするずきに倧きな問題に぀ながりたす。
    すでに行われおいるこずは簡単ではありたせん


䞀方、Vue CLI 3は今日で最もクヌルなCLIです。


  1. カスタマむズは非垞に䟿利で、プラグむンシステムのおかげで、い぀でもパッケヌゞを远加できたす。
  2. webpackによるシンプルさず柔軟性


Zone.js察Vue Reactivity


AngularはZone.jsを䜿甚しお倉曎を远跡したす。これは、 setTimeoutような、この暙準APIのパッチです。


これにより、特定の問題が発生したす。


  1. 非暙準APIの難しさ、時には解決が非垞に難しい
  2. 恐ろしい痕跡
  3. 䞀般的に私芋では、これはハックであり、最も゚レガントなものからは皋遠い

VueはZone.jsを必芁ずしたせん。远跡は、すべおのデヌタ/状態プロパティをObserverに倉換するこずで機胜したす。


ある時、ある皮を芋お、圌は魔法がなかったこずに倚少動揺しおいたした。


最䞊䜍では、すべおが簡単です。VueはObject.definePropertyを介しおすべおのプロパティを通過しこのためIE8以䞋はサポヌトされたせん、ゲッタヌずセッタヌを远加したす。


远加するものすらありたせん...


ただし、このアプロヌチには萜ずし穎がありたすが、 説明が非垞に簡単で理解しやすいです。
さらに、理解はJS自䜓の䞭栞であるVueほどではありたせん。


Vueでは、既存のむンスタンスに新しいルヌトリアクティブプロパティを動的に远加するこずはできたせん。 ただし、Vue.setオブゞェクト、キヌ、倀メ゜ッドを䜿甚しお、ネストされたオブゞェクトにリアクティブプロパティを远加できたす。

 var vm = new Vue({ data: { a: 1 } }) //  vm.a —   vm.b = 2 // vm.b   Vue.set(vm.someObject, 'b', 2) 

バヌゞョン2.6以降、Vueでもこれらの問題が発生しないこずに泚意しおください。 プロキシぞの移行が行われ、プロパティの远加/削陀も远跡できるようになりたす。


Rxおよび状態管理


Angularでは、フレヌムワヌクの䞭栞はRxJSであり、すべおがObservableです。
Rxに察する私の愛にもかかわらず、私ず倚くの人は、Rxが本圓にAngular内で必芁かどうかに぀いお質問をしたした。


特に最初は、倚くの人が.toPromise()を介しおObservableを.toPromise() 。


ずにかく、Angular自䜓の耇雑さに加えお、䞀般的なデヌタバスのアむデアは理解するのが最も簡単ではありたせん。


同時に、Angularは非垞に倧芏暡なフレヌムワヌクであるため、珟圚最も人気のあるデヌタ管理パタヌンであるState Managementのすぐに䜿甚可胜な実装を提䟛したせん。


NgRxがありたすが 、それはそれほど前に完党に䜿甚可胜になりたせんでした-結果ずしお、Reduxのようなストアのカスタム実装を持぀叀いプロゞェクトさえありたす。


そしお今、Vueに぀いお。


RxJSファンは、新しいパッケヌゞを远加するだけで、い぀でも簡単にプラグむンできたす。


すでにVue-Rxがあり 、デヌタずずもにRxJS Observabl'yを䜿甚できたす。


囜家管理に぀いお話すず、玠晎らしい公匏Vuexがありたす。
ある時、私は非垞に驚いお、圌以倖にも膚倧な数の遞択肢があるこずを発芋したした。



立ち寄る


実際、これは䞻な利点誰かに欠点があるように芋えるかもしれたせんががVueであるずころです-必芁に応じおすべおを接続できたす。


远加するだけです


  1. æ°Ž
  2. Rxjs
  3. ノ゚ックス
  4. TypeScript
  5. SCSS
    ...

䞍足しおいおも、垞に簡単か぀迅速に統合されたす。


ルヌタヌ


Angularから受けた最も深刻な粟神的損傷の1぀の理由は、ルヌタヌです。
圌はすでに3回察応しおいるずいう事実にもかかわらず、圌はただひどいです はい、私は繰り返したす。


圌のすべおの問題を詳现に説明するわけではありたせんが、このトピックは痛みを䌎うので、簡単に説明したす。


  1. 名前付きルヌトはありたせん-最も奇劙な決定の1぀は、名前付きルヌトを削陀するこずでした。これにより、耇雑なアプリケヌションをサポヌトする利䟿性が䜎䞋するこずがありたした。
  2. タむプごずに確認する必芁がある奇劙なむベントシステム
  3. ルヌトパラメヌタをObservableに倉換する-コンポヌネントの起動時に1回だけ必芁な堎合、ルヌトパラメヌタを操䜜するのは非垞に䞍䟿な堎合がありたす
  4. ナビゲヌションのために、 チヌムが考案されたした。非垞に奇劙であたり有甚ではない゜リュヌションであり、ルヌタヌでは䜿甚されなくなりたした
  5. TypeScriptのみを䜿甚したアプリケヌションでのモゞュヌルの文字列名による遅延読み蟌み...コメントなし
    ...など

䞊べ替えを芋るず、これらの問題の倚くがルヌタヌの耇雑さず機胜に関連しおいるこずがわかりたす。


぀たり、チヌムのように奇劙な決定がなくおも、機胜の数は䟝然ずしお難しくなりたす。


Vueでは、ルヌタヌは非垞にシンプルで動䜜したす。


簡単に蚀えば、Angularに粟通しおいるabstract: trueパラメヌタヌが䞀床も芋぀からなかったこずに蚀及する必芁がありたす。


テンプレヌトなしですぐにルヌトを䜜成するこずはできたせんが、これは1行のコヌドで解決されたす-次のようなコンポヌネントを䜜成するこずにより


 // AbstractRoute.vue <template> <router-view/> </template> 

そのような機胜がすぐに䜿えるのは悪いこずですか


はい、いいえ。問題を簡単に解決できるこずが重芁であり、䞀方でAngularの策略ずは察照的にルヌタヌ自䜓の耇雑さず速床が重芁だからです。


ずころで、ここにクヌルなものがありたす


  path: `url/sub-url/:id', component: MyComponent, props: true 

これで、コンポヌネントMyComponentにはprops id 、これはURLからのパラメヌタヌになりたす。
これぱレガントな゜リュヌションです idはすぐにリアクティブになり、コンポヌネントで䜿甚するず非垞に䟿利です再び機胜したす 。


拡匵ず再利甚


䞀方では、AngularのすべおのコンポヌネントはTypeScriptクラスです。
それにもかかわらず、倚くのTypeScript チップを䜿甚するこずは、しばしば䞍䟿たたは䞍可胜です。


これは䞻にOOPに適甚されたす-継承、抜象クラス、スコヌプ。
䞻な問題は、䟝存性泚入ずAOTコンパむラヌで発生したす それらに遭遇するこずは神が犁じおいたす。


Vueでは、むンスタンス構成はオブゞェクトです-簡単に操䜜しお展開し、リファクタリングしたす。
コヌドを再利甚するための匷力なものがありたす-ミックスむンずプラグむンこれに぀いおは以䞋で詳しく説明したす。


UIコンポヌネント


゚ンタヌプラむズセグメントでは、コンポヌネントには通垞、完成したデザむン、モカパなどがありたす。 ほずんどの堎合、それらはれロから䜜成され、特定のタスク/補品/プロゞェクトのためにすぐにシャヌプ化されたす。
しかし、い぀たでもそうではないので、開発者は、特にペットプロゞェクトやプロトタむピングのために、すべおをれロから䜜成する機䌚がありたす。


ここでは、既補のUIコンポヌネントのラむブラリが圹立ちたす。Vueには、Element、Vuetify、Quasar、Vue-Material、Muse、iViewなど、すでに非垞に倚くのラむブラリがありたす。



特にElementずVuetifyに぀いお蚀及したす。印象は厳密にポゞティブです。あらゆるニヌズに察応する矎しく安定したコンポヌネント、優れたドックです。


たた、 クヌルなBulma CSSフレヌムワヌクに基づいたBuefyコンポヌネントセットも非垞に気に入っおいたす。サヌドパヌティのコンポヌネントが必芁に応じお接続されるBulmaアプリケヌションで䜿甚するず特に䟿利です。


Angular-゚ンタヌプラむズレベルのコンポヌネントラむブラリの堎合、ほんの2、3個の断片であり、これらは䞻にAngular MaterialGoogleずClarityVMWareです。


残念ながら、Clarityの開発のペヌスは最近䜎䞋したした。これは、この問題に関するAngularの芋通しに関しおさらに苛立たしいものです。




実際の経隓ず問題


そしお今、戊闘プロゞェクトでVueを䜿甚した実際の経隓からの䞻な問題。


自由すぎる


深刻なプロゞェクトの䞻な問題Vue、今日、私はあたりにも倚くの遞択の自由を呌びたす。


䞀方では、同じこずが倚くの異なる方法で実行できるずいう事実は非垞にクヌルです。


しかし、実際には、これはコヌドベヌスが非垞に矛盟するずいう事実に぀ながりたす。


誇匵された䟋ペヌゞ䞊のカスタムロゞックは、コンポヌネントを宣蚀するこずで䜜成でき、ロヌカルの堎合もありたす


 const Component = { created() { // logic ... }} new Vue({ components: [Component], 

ずおもグロヌバルどこからでもアクセス可胜。


 Vue.component('Global', { created() { // logic ... }}) 

この機胜を実装するロヌカルMixinを䜜成できたす


 const mixin = { created() { // logic ... }} new Vue({ mixins: [mixin], 

さらに、それ混合it..は再びグロヌバルになりたす。


 Vue.mixin({ created() {// logic ... }}) 

結局のずころ、グロヌバルミックスむンずほが同じこずを行うプラグむンがありたす。


 const MyPlugin = { install(Vue, options) { Vue.mixin({ created() { // logic ... }}) } 

もちろん、これらの機胜はすべお特定のタスクに実際に必芁であり、非垞に䟿利です。
ただし、開発者にずっお、特に初心者にずっお、どのオプションを遞択するかは必ずしも明らかではありたせん。


必芁なコヌドを確認する


Vuexを䜿甚しおいるずいう事実にもかかわらず、私は、州ではなくデヌタを䜿甚しないこずは非垞に難しい堎合があるこずを自分で指摘したした。


これは速床の問題です。デヌタに䜕かを远加する方が速いこずは明らかですが、ほずんどの堎合、デヌタを状態に移動しお䜙分な時間を費やす必芁があるこずがわかりたす。


おそらく、コヌドのレビュヌがなく、Vueをあたり経隓しおいない倚数の埌茩がいるプロゞェクトでは、状況は特に悲しいでしょう。


数ヶ月でこのようなコヌドを扱うこずは完党に䞍快になるず思いたす。


単䜓テスト


たた、Angularの埌、Jestでいく぀かのものを濡らすのはあたり䟿利でも明癜でもありたせんでした。
具䜓的な䟋は、ロヌカルストレヌゞです。 誰かがこの問題をgithubでグヌグル怜玢するこずで決定したした 。


 Object.defineProperty(window, 'localStorage', { value: localStorageMock, }) 

解決策は私には矎しく芋えたせんでしたが、埌で刀明したように、 より゚レガントなものがありたす


 global.localStorage = localStorageMock; 

はい、これはVueの問題ではなく、Angularず比范した生態系の問題です。


私の意芋では、たさにそのような実際の䟋はドキュメントに蚘茉されるべきです。


クックブック


䞀般に、Vueの担圓者はこの問題を認識しおおり、 レシピ付きのクックブックを䜜成するこずで解決しおいたす 。
実際、これは䞀般的なタスクに察する既補の゜リュヌションのセットです。
䟋は次のずおりです。 単䜓テスト 、
怜蚌ずHTTPの操䜜 。


しかし、レシピはただ非垞に基本的であり、深刻なタスクには非垞に欠けおいたす。
テストが説明されおおり、䞀般的な理解のためにはこれで十分ですが、䞊蚘のモッキングを自分で探す必芁がありたす。


怜蚌に぀いおは埌で説明したすが、HTTPの操䜜に぀いおは、十分に詳しく説明されおいたせん。


Angularはサヌビスを通じおバック゚ンドAPIを操䜜するこずを教えおくれたず思いたすが、これはコヌドのサポヌトず再利甚を倧幅に促進する良いパタヌンだず思いたす。


しかし、私たちには悪名高いDIがなく、サヌビスむンスタンスの䜜成はあたり䟿利ではないので、クックブックにも同様のパタヌンが必芁です。


ほずんどの堎合、ロヌカルコヌドの芏則ずベストプラクティスを開発するこずにより、この問題を解決したした。 蚘事の最埌のリンク


TypeScript


TypeScriptがいかに䟿利で䟿利であるかに぀いお䜕床も述べ、曞いおきたしたが、事実、あなたはそれを調理できる必芁があるずいうこずです。


Angularでは、すべおが実隓的な機胜装食、内郚クラス、および数癟数千の冗長な抜象化に関連付けられおいたす。



Vueでは、TypeScriptの可胜な䜿甚法ははるかに論理的です。開発者の機胜を拡匵できるのは、1぀たたは別の蚀語機胜に瞛られるこずなく可胜です。


VueのTypeScriptの問題


ただし、今日、VueでTypeScriptを䜿甚するのは必ずしも簡単ではないため、ここでいく぀かの問題に遭遇したした。


第䞀に、圌らは自分の壊れたテスト=


もちろん、冗談は私の個人的な痛みです


2぀のアプロヌチ


VueのTypeScriptの䞻な問題は、 それを䜿甚するための公匏のアプロヌチが2぀あるこずです。


これはVue.extendですVueにバンドルされおおり、メむンラむブラリず共にサポヌトされおいるタップ


 import Vue from 'vue' const Component = Vue.extend({ ... }) 

Angular decorator vue-class-componentに非垞に䌌おいたす


 import Vue from 'vue' import Component from 'vue-class-component' @Component({ template: '<button @click="onClick">Click!</button>' }) export default class MyComponent extends Vue { message: string = 'Hello!' onClick (): void { window.alert(this.message) } } 

個人的に、私はクラスコンポヌネントが奜きではありたせん、そしお、倚くの理由でVue.extendを䜿甚したす


  1. クラスコンポヌネントには独自のトリック/欠点がありたす
  2. デフォルトのES6 Vueコンポヌネントをできる限り避けたい
    • TS甚に線集する必芁なく、ドキュメントから盎接コヌドを䜿甚したす
  3. チヌムは、TypeScriptなしでVueがどのように機胜するかを理解する必芁がありたす。
    • 特に、ほずんどが角床のある背景を持぀こずを考慮しお

その他の問題


悲しみの床合いを倉えた、TypeScriptのいく぀かの問題を次に瀺したす。


  1. TSlint はそのたたでは Vueで動䜜したせん-.vueファむルに察しおは実行できたせん 。 䞀般に、fork-ts-checkerによる解決策がありたすが、それらはすべおいです
  2. TypeScriptのESlintは控えめに蚀っおもスヌパヌではありたせん。 プラグむンずパヌサヌの䞡方がただ開発䞭です。
    倚くのコアおよびビュヌルヌルは砎られたすが、䞻な問題は非垞に䞍明瞭な゚ラヌがあるこずです。
    ただし、これにもかかわらず、壊れたルヌルを無効にし、必芁なルヌルをひねっお具䜓的に䜿甚したす。
    ESlint configぞのリンク 。
  3. Vuexストアは倖郚で入力されおいないため、これを呌び出すthis.$storeコンポヌネントからのthis.$storeは事実䞊すべおのペむロヌドで可胜

ただし、Vue.extendには次のような欠点がありたす。


  1. クラスキャプテンずしお、プラむベヌト、静的メ゜ッドなどを䜿甚するこずはできたせん。
  2. Vuexのマッパヌによる痛み... mapGetters、... mapStateなど これらのマッパヌを䜿甚するず、入力が倱われ、奇劙な゚ラヌが衚瀺されたす。 決定が満たされるのを埅っおいたす。
  3. デヌタプロパティを入力するのは䞍䟿です これは関数です-その戻り倀を蚘述するむンタヌフェヌスを䜜成する必芁があるたびに
  4. 小道具の正盎なタむピングは䞀般的にほずんど䞍可胜です。 ネむティブJS型を宣蚀する必芁があり、通垞はTypeScriptむンタヌフェむスが期埅されたすが、キャストにはい解決策がありたす

 //      myObjectProps interface MyType = {...} //   data interface MyComponentData = { someBooleanProp: boolean; } export default Vue.extend({ data(): MyComponentData { //    data  return { someBooleanProp: false }; }, props: { myObjectProps: Object as MyType //   TS  }, 

Vuexを䜿甚したフォヌム


䞀般に、フォヌムはVuexの問題だけでなく、ほがすべおの状態管理パタヌンです。
それでも、それは䞀方向のデヌタフロヌを䌎い、圢匏は双方向の猶詰を意味したす。


Vuexは2぀の゜リュヌションを提䟛しおいたす。


valueを状態倀にバむンドし、曎新するために-コミットを送信する入力むベント


 <input :value="message" @input="updateMessage"> 

 // ... computed: { ...mapState({ message: state => state.obj.message }) }, methods: { updateMessage (e) { this.$store.commit('updateMessage', e.target.value) } } 

たたは、それにもかかわらず、双方向のカヌヌずv-modelゲッタヌずセッタヌを介しお取埗およびコミットしたす。


 <input v-model="message"> 

 // ... computed: { message: { get () { return this.$store.state.obj.message }, set (value) { this.$store.commit('updateMessage', value) } } } 

2番目のオプションはより䟿利で簡朔ですが、それでも非垞に冗長です。
このように20以䞊のフィヌルドを持぀フォヌムを蚘述するこずを想像しおみおください。
このような䞀芋原始的なタスクのための膚倧な量のコヌドが刀明したした。


マッパヌ、぀たりmapGetters()およびmapMutations()を䜿甚する堎合、問題の関連性はやや䜎くなりたす。
しかし、䞊で曞いたように、圌らは珟圚TypeScriptでうたく機胜しおおらず、別の解決策を探す必芁がありたした。


ゲッタヌ状態からのゲッタヌずセッタヌコミット突然倉異を远加する非垞に原始的なマッパヌを䜜成したした。


 static mapTwoWay<T>(getter: string, mutation: string) { return { get(this: Vue): T { return this.$store.getters[getter]; }, set(this: Vue, value: T) { this.$store.commit(mutation, value); } }; } 

これにより、コヌドの量を枛らし、フィヌルドを次のように蚘述できたす。


 stringTags: Util.mapTwoWay<IDatasetExtra[]>(STRING_TAGS, UPDATE_STRING_TAGS) 

そしお、それに応じお、 v-model䜿甚したす。


 v-model="stringTags" 

フォヌム怜蚌


Angularの埌で私を驚かせたのは、Vueの箱から出しおすぐにはフォヌムの怜蚌がないこずです。 どうやら、この機胜は非垞に人気がありたす。


ただし、これは重芁ではありたせん。このタスクには2぀の最も䞀般的な゜リュヌションがありたす。


vee-validate


1぀目は、Angular- vee-validateのテンプレヌト駆動フォヌムに非垞によく䌌たメカニズムです。


実際、すべおの怜蚌ロゞックをHTMLで蚘述したす。


 <input v-validate="'required|email'"> 

このアプロヌチは、比范的小さい/耇雑でないフォヌムにのみ適しおいるず思いたす。
実際には、怜蚌は非垞に掗緎されおいるこずが倚く、HTMLですべおを蚘述するこずは䞍䟿になりたす。


さらに、Vuexではうたく機胜したせん。


怜蚌する


2番目の解決策はVuelidateです。 ほずんどすべおのコンポヌネントを怜蚌するための非垞に゚レガントな方法-モデル自䜓が怜蚌され、1぀たたは別の入力ではありたせん。


おもしろいこずに、このすばらしいパッケヌゞを発芋する前に、私たちはすでに䌌たようなものを曞き始めおいたした。


 <input v-model="name" @input="$v.name.$touch()"> 

 import { required, email } from 'vuelidate/lib/validators' export default { data () { return { name: '' } }, validations: { name: { required, email } } } 

必芁に応じお、フォヌムの怜蚌でVuelidateをすぐに怜蚎するこずを匷くお勧めしたす。これはVuexを含むうたく機胜し、接続ずカスタマむズが簡単です。


Vueメむンチップ/問題


実際、これが䞻な問題です Vue-それは単なるラむブラリであり、だたされたオヌルむンワンフレヌムワヌクではありたせん。


箱から出しお



はい、公匏にサポヌトされおいたす



しかし、これらすべおの機胜を備えたVueには、Animationのようなクヌルな組み蟌み機胜がありたす。


か぀お私は、䜕かをアニメヌション化するための最も豊かな可胜性に倚少驚いおいたした。


これは、おそらく同じAngularよりもはるかに䟿利で匷力なツヌルボックスです。


ドキュメントからのクヌルな䟋 



ナむトりォッチずe2e


やはりVueに盎接関係しない小さな問題ですが、実際のプロゞェクトで遭遇したした。


e2eテスト甚のプロゞェクトを生成するずき、すぐにNightwatchずCypressのどちらかを遞択できたす。


個人的には、今日のサむプレスがe2eテストの最もクヌルなツヌルであるず私は考えおいたすが、Chrome以倖のブラりザはただサポヌトされおいたせん 。


そのため、戊闘プロゞェクトには遞択できたせんでした。実際のカスタムナヌザヌは匕き続き他のブラりザを䜿甚しおいたす。


テストが完党に䞍可解な理由でLinux CIに該圓し始めたらWindowsではすべお問題ありたせんでした、゚ラヌは有益ではありたせんでした。
埌で、問題がURLのハッシュに関連しおいるこずがわかりたした。
぀たり、 vue-routerを䜿甚する堎合、そのようなURLはデフォルトです。


, ChromeDriver , Nightwatch ( Cypress TestCafe), "" url :


 .url('data:,') .url(client.globals.devServerURL + `/#/my-hashed-url`) 



Angular boilerplate , , Vue .


, , Developer Experience. , .


, .



Vue — React Native.
.


, Vue NativeScript Vue, , , .
Weex, , .


性胜


. .




: http://www.stefankrause.net/js-frameworks-benchmark7/table.html
( " " ).


: GitLab ,
CodeShip , Alibaba, Xiaomi .


おわりに


.


— TypeScript Vue , , .


, production.
, , TS Vue, JavaScript.


, , , TypeScript .


Vue , , .


, " ", Tide Vue .


code conventions


, , .
, .



cookbook — , ( ).


Vue seed (TS, Jest, ESlint ..), , Vue CLI 3,
.
Vue CLI 3 .


??

はい ご枅聎ありがずうございたした。

PS: , Vue — ,


PPS: , () — =(


: https://medium.com/@igogrek/how-i-started-loving-vue-d41c1c8e77e1



Source: https://habr.com/ru/post/J358766/


All Articles