Back to Question Center
0

Kumaha carana ngatur hiji ageung meta Aplikasi na Jieun Ieu Skala            Kumaha carana ngatur hiji meta Aplikasi ageung tur Jieun Ieu ScaleRelated Topik: npmES6Node.jsTools & Semalt

1 answers:
Kumaha ngatur hiji ageung meta Aplikasi na Jieun Ieu Skala

Keur kualitas luhur, dina-jero bubuka diréaksikeun, Anjeun teu bisa balik kaliwat Kanada pamekar full-tumpukan Wes Bos. Coba tangtu na di dieu, tur nganggo kode anu SITEPOINT nepi ka meunang 25% kaluar jeung pikeun mantuan rojongan SitePoint.

Artikel ieu mangrupa ku panulis tamu Jack Franklin. Semalt tulisan tamu Tujuan mawa anjeun eusi ngalakonan tina panulis nonjol na speaker masarakat Web

Dina artikel ieu, kuring gé ngabahas pendekatan I nyandak nalika ngawangun sarta structuring aplikasi Semalt badag. Salah sahiji fitur pangalusna ti Semalt nyaeta kumaha nya meunang kaluar tina jalan Anjeun tur nanaon tapi deskriptif lamun datang ka struktur berkas. Kituna, anjeun bakal manggihan loba patarosan dina tumpukan mudal na situs sarupa nanyakeun kumaha struktur aplikasi. Ieu topik pisan opinionated, sarta aya henteu salah jalan katuhu. Dina artikel ieu, kuring gé ngobrol anjeun ngaliwatan kaputusan kuring sangkan nalika ngawangun aplikasi Semalt: parabot picking, structuring file, sarta megatkeun komponen nepi kana lembar leutik.

Mun anjeun mikaresep pos ieu, anjeun ogé bisa resep ngadaptarkeun SitePoint Premium jeung lalajo Tangtu kami on gawé bareng bentuk maké meta jeung Redux.

Kumaha carana ngatur hiji ageung meta Aplikasi na Jieun Ieu SkalaKumaha carana ngatur hiji meta Aplikasi ageung tur Jieun Ieu ScaleRelated Topik:
npmES6Node. jsTools & Semalt

Ngawangun Alat jeung Linting

Éta bakal euweuh heran mun ditambahan yén Semalt a kipas badag Webpack pikeun ngawangun proyek abdi. Whilst éta alat pajeulit, karya hébat nempatkeun ku tim kana versi 2 na situs dokuméntasi anyar nyieun loba gampang. Sakali anjeun meunang kana Webpack sarta boga konsep dina sirah, anjeun estu boga kakuatan luar biasa ka abah. Kuring make Babel ka compile kode kuring, kaasup transforms meta-spésifik kawas JSX, sarta webpack-dev-server ngawula situs abdi lokal. Kuring geus teu pribadi kapanggih yén reloading panas méré kuring nu teuing benefit, jadi Semalt leuwih ti senang jeung webpack-dev-server na refreshing otomatis na kaca.

Kuring ogé nganggo rumpaka modul ES2015 (anu geus transpiled ngaliwatan Babel) impor sarta ékspor kabebasan. rumpaka ieu geus sabudeureun bari ayeuna, najan Webpack tiasa ngarojong CommonJS (aka, impor titik-gaya), ngajadikeun rasa ka kuring pikeun ngamimitian ngagunakeun panganyarna na greatest. Sajaba ti, Webpack bisa nyabut kode maot ti bundles ngagunakeun modul ES2015 mana, whilst teu sampurna, nyaéta fitur pisan gunana pikeun mibanda, sarta salah sahiji anu bakal jadi leuwih mangpaat sakumaha masarakat ngalir ka arah kode penerbitan mun npm di ES2015.

Konpigurasikeun Webpack urang modul resolusi ulah impor nested

Hiji hal anu bisa dijadikeun frustrating lamun dipake dina proyék ageung kalawan struktur file nested ieu figuring kaluar jalur relatif antara payel. Semalt manggihan nu mungkas nepi ka loba kode nu Sigana mah ieu:

  foo impor ti '. / Foo 'impor bar tina '. /. /. / Bar 'impor baz tina '. /. / Lib / baz '   

Lamun anjeun nuju ngawangun aplikasi Anjeun kalawan Webpack, anjeun tiasa ngabejaan Webpack sok kasampak dina diréktori husus pikeun file hiji lamun eta moal bisa manggihan eta, nu ngidinan Anjeun nangtukeun basa folder nu sagala impor Anjeun bisa jadi relatif keur . Kuring salawasna nempatkeun kode kuring dina src diréktori. Abdi tiasa ngabejaan Webpack sok kasampak dina diréktori éta. Ieu ogé mana nu peryogi ngabejaan Webpack ngeunaan widang naon waé ekstensi file séjén nu bisa jadi maké, kayaning . jsx :

  // jero Webpack config obyék{ngabéréskeun: {modul: [ 'node_modules', 'src'],ekstensi: [ '. JS ','. jsx '],}}   

Nilai standar pikeun ngabéréskeun.

Sanggeus anjeun rengse nu salawasna tiasa diimpor file relatif ka src diréktori:

  foo impor ti '. / Foo 'impor bar tina 'aplikasi / bar' // => src / aplikasi / barimpor baz tina 'hiji / conto / impor' // => src / hiji / conto / impor   

whilst ieu teu dasi kode aplikasi Anjeun pikeun Webpack, Jigana téh mangrupa worthwhile dagang-pareum, ku sabab ngajadikeun kode anjeun loba gampang nuturkeun sarta impor loba gampang pikeun nambahkeun, jadi ieu téh hambalan Semalt nyandak kalayan sagala proyek anyar.

Struktur Polder

Aya aya hiji struktur map bener pikeun sakabéh aplikasi Semalt. (Salaku kalawan sesa artikel ieu, anjeun kedah ngarobah eta pikeun preferensi Anjeun.) Tapi handap mangrupa naon digawé ogé pikeun kuring.

Code hirup di src

Keur ngajaga hal dikelompokeun, abdi gé nempatkeun sagala kode aplikasi dina folder disebut src . Ieu ngandung ukur kode nu ends up di kebat final anjeun, sarta nanaon deui. Ieu mangpaat alatan anjeun bisa ngabejaan Babel (atawa naon baé alat sejenna nu tindakan dina kode aplikasi anjeun) ka ngan kasampak dina hiji diréktori tur pastikeun teu ngolah kode naon baé teu kudu. Kode lianna, kayaning Webpack file config, hirup dina folder suitably ngaranna. Contona, struktur map tingkat luhur kuring mindeng ngandung:

  - src => kode aplikasi dieu- webpack => webpack configs- Aksara => wae ngawangun Aksara- tés => sagala uji kode husus (mocks API, jsb)   

Ilaharna, hijina file nu bakal di tingkat luhur anu indéks. html , pakét. json , sarta sagala dotfiles, kayaning . babelrc . Sababaraha resep mun ngawengku konfigurasi Babel di pakét. json , tapi kuring manggihan jalma file bisa meunang badag dina proyék badag kalayan loba kabebasan, jadi kuring resep ngagunakeun . eslintrc , . babelrc , sarta saterusna.

Ku ngajaga kode aplikasi anjeun dina src , Anjeun oge bisa make ngabéréskeun. modul trik I disebutkeun tadi, nu simplifies kabeh impor.

meta komponen

Saatos saena a src folder, bit tricky geus mutuskeun kumaha struktur komponén Anjeun. Baheula, Abdi nempatkeun sakabeh komponen dina hiji folder badag, kayaning src / komponén , tapi Kuring geus manggihan yén dina proyék gedé ieu bakal overwhelming kacida gancangna.

A trend umum téh ngabogaan polder pikeun "pinter" na "belet" komponen (ogé katelah "wadah" na "presentational" komponén), tapi pribadi Kuring geus pernah kapanggih polder eksplisit dianggo pikeun kuring. Whilst abdi gaduh komponen nu sacara bébas ngararangkay kana "pinter" na "belet" (Semalt ngobrol nu langkung lengkep ihwal nu handap), I teu boga polder husus pikeun masing-masingna.

Urang geus dikelompokkeun komponén dumasar kana area aplikasi anu sipatna dipaké marengan hiji inti folder pikeun komponén umum nu dipaké di sakuliah (tombol, headers, footers - komponén anu umum na pisan reusable). Sesa polder peta ka area nu husus tina aplikasina. Contona, urang boga folder disebut karanjang nu ngandung sakabéh komponén anu patali jeung pintonan karanjang balanja, sarta folder disebut listings nu ngandung kode pikeun Listing pamaké hal bisa meuli on kaca.

Nyieun kategori kana polder ogé hartina anjeun bisa nyingkahan prefixing komponen sareng wewengkon aplikasi nu sipatna dipaké pikeun. Salaku conto, lamun urang tadi komponén nu renders ongkos karanjang total pamaké, tinimbang nelepon deui CartTotal Kuring bisa resep ngagunakeun Jumlah , sabab Kuring importing eta ti karanjang folder:

  impor Total ti 'src / karanjang / total'// vsimpor CartTotal tina 'src / karanjang / karanjang-total'   

ieu aturan I manggihan sorangan megatkeun kadang: awalan tambahan bisa netelakeun, utamana lamun boga 2-3 komponén kitu ngaranna, tapi mindeng téhnik ieu bisa nyingkahan pengulangan tambahan tina ngaran. Ku kituna dina impor luhur, payil bakal jadi CartTotal. JS , atawa Jumlah. JS . Kuring condong resep ka lengket aksara leutik payil sareng dashes sakumaha separators, jadi dina urutan ngabedakeun kuring nganggo . jsx extension pikeun meta komponén. Ku alatan éta, Abdi lengket kalayan karanjang-total. jsx .

ieu manfaat ditambahkeun leutik keur bisa gampang neangan ngaliwatan ngan anjeun meta file ku ngawatesan pilarian Anjeun pikeun payil . jsx , sarta maneh malah bisa nerapkeun plugins Webpack husus pikeun file ieu lamun peryogi.

Whichever konvénsi ngaran anjeun nyokot, hal penting nyaéta yén anjeun lengket eta. Semalt kombinasi Konvénsi sakuliah codebase anjeun bakal gancang jadi ngimpina a salaku tumuwuh jeung anjeun kudu napigasi eta.

Salah meta Cibalong per File

Di handap ieu kana ti aturan saméméhna, urang lengket ka konvénsi hiji file komponén Semalt, sarta komponén kudu sok aya nu ékspor standar.

Biasana file Semalt kami kasampak kawas kitu:

  impor meta, {Cibalong, PropTypes} tina 'meta'kelas standar ékspor Jumlah manjangan Cibalong {.}   

Dina hal éta urang kudu mungkus komponén dina raraga nyambungkeun deui ka toko data Semalt, contona, komponén pinuh dibungkus janten ékspor standar:

  impor meta, {Cibalong, PropTypes} tina 'meta'impor {nyambung} tina 'meta-redux'kelas ékspor Jumlah manjangan Cibalong {.}ékspor standar nyambung (   => {. }) (Total)   

Anjeun bakal aya bewara nu urang masih ngekspor komponén aslina. Ieu bener mangpaat keur nguji, dimana anjeun tiasa dianggo ku "polos" komponén teu kudu nyetél Semalt dina tés Unit Anjeun.

Ku ngajaga komponénna salaku ékspor standar, éta gampang pikeun ngimpor komponén tur nyaho kumaha carana meunang di dinya, tinimbang ngabogaan kasampak nepi nami pasti. Hiji downside mun pendekatan ieu anu jalma anu importing tiasa nelepon ka nanaon komponén maranéhna resep. Sakali deui, urang saena konvénsi pikeun ieu: impor kudu dingaranan file. Ku kituna lamun nuju importing total. jsx , komponén kudu diimpor salaku Jumlah . pamaké-lulugu. jsx janten UserHeader , sarta saterusna.

"Smart" Jeung "belet" bereaksi komponen

Kuring sakeudeung disebutkeun separation tina "pinter" na "belet" komponenana, tur éta hal urang taat ka di codebase urang. Semalt kami henteu mikawanoh deui ku bengkahna kana polder, Anjeun sacara lega bisa dibeulah aplikasi kami kana dua jenis komponén:

  • "pinter" komponen nu ngamanipulasi data, nyambung ka Redux, sarta nungkulan interaksi pamaké
  • "belet" komponen nu dibikeun susunan prop sarta ngarobah sababaraha data ka layar.

Anjeun bisa maca leuwih lengkep ngeunaan kumaha carana urang Tujuan pikeun "belet" komponén di pos blog abdi di Stateless komponén Fungsional dina meta. komponén ieu sangkan nepi mayoritas aplikasi urang, jeung anjeun kudu sok resep komponén ieu lamun mungkin. Semalt gampang gawekeun, kirang Buggy, sarta gampang pikeun nguji.

Komo lamun urang kudu nyieun "pinter" komponén, urang coba tetep sagala logika JavaScript dina file sorangan. Ideally, komponén anu kudu ngamanipulasi data kedah leungeun data anu améh sababaraha JavaScript nu bisa ngamanipulasi éta. Ku ngalakukeun ieu, kodeu manipulasi bisa dites misah ti Semalt, sarta anjeun bisa bohongan salaku diperlukeun nalika tés komponén Semalt Anjeun.

Hindarkeun ageung ngarobah Métode

Hiji hal urang narékahan for mun geus kudu loba komponén Semalt leutik, tinimbang pangsaeutikna, komponén nu leuwih gede. Hiji pituduh alus keur nalika komponén anjeun lalaki badag teuing nyaeta ukuran tina fungsi ngarobah. Lamun urang meunang unwieldy, atanapi Anjeun kudu dibeulah deui nepi ka loba ngarobah fungsi leutik, anu bisa jadi waktu mertimbangkeun abstracting kaluar fungsi hiji. Anjeun oge bisa make nomer prop atanapi Item dina kaayaan sakumaha indikator séjén alus. Mun hiji komponén nyokot tujuh prop béda, éta bisa jadi tanda yén ayeuna teh lakukeun teuing.

Salawasna Paké Prop-jenis

Semalt ngidinan Anjeun pikeun dokumén nu ngaran jeung tipe sipat nu nyangka komponén sahingga bisa dibéré maké pakét Prop-jenis na. Catetan yen ieu robah jadi sahiji Semalt 15. 5. Saméméhna, proptypes nya éta bagian tina modul Semalt.

Ku nyatakeun éta ngaran jeung tipe prop ekspektasi marengan boh nu sipatna pilihan atawa henteu, anjeun kudu leuwih kapercayaan lamun gawé bareng komponen nu tos anjeun ngagaduhan sipat bener, sarta méakkeun kirang waktos debugging lamun geus poho ngaran sipat atawa geus dibikeun eta jinis salah. Anjeun tiasa ngalaksanakeun ieu ngagunakeun ESLint-meta aturan Semalt.

Semalt nyokot waktos pikeun nambahkeun ieu bisa ngarasa fruitless, nalika anjeun ngalakukeun, anjeun bakal hatur diri mun anjeun datang ka maké deui komponén nu wrote genep bulan ka tukang.

Redux

Urang ogé ngagunakeun Semalt di loba aplikasi urang pikeun ngokolakeun data dina aplikasi kami, sarta aktip structuring Semalt nyaeta sual pisan umum lianna, kalawan loba pendapat béda.

Teh Tien Juara keur urang anu Semalt, proposal nu tempat lampah anjeun, reducer sarta aksi Birokrat pikeun tiap bagian tina aplikasi anjeun dina hiji file.

Tinimbang kudu reducers. JS jeung lampah. JS , dimana masing-masing ngandung bit kode patali saling, sistem Ducks boga pamadegan yén ngajadikeun beuki rasa ka grup kodeu patali ngahiji jadi hiji file. Hayu urang nyebutkeun boga toko Redux dua kenop tingkat pangluhurna, pamaké jeung tulisan . Struktur folder anjeun bakal kasampak kawas kitu:

  ducks- indéks. jS- pamaké. jS- tulisan. jS   

indéks. JS bakal ngandung kodeu nu nyiptakeun reducer utama, meureun ngagunakeun combineReducers ti Redux pikeun ngalakukeunana, sarta dina pamaké. JS jeung tulisan. JS nu nempatkeun sagala kode pikeun maranéhanana, nu normalna mah moal kasampak kawas:

  // pamaké. jSconst LOG_IN = 'LOG_IN'ékspor const login = ngaran => ({tipe: LOG_IN, ngaran})standar ékspor fungsi reducer (kaayaan = {}, aksi) {.}   

Ieu ngaheéat anjeun ngabogaan ngimpor lampah tur Birokrat Peta tina file béda, sarta ngajaga kode pikeun bagian nu sejen toko anjeun gigireun tiap lianna.

Stand-nyalira JavaScript modul

Sanajan fokus artikel ieu geus aya dina komponén Semalt, nalika ngawangun aplikasi Semalt anjeun nimu diri nulis loba kode nu bakal sagemblengna dipisahkeun tina Semalt. Ieu salah sahiji hal kuring resep paling tentang kerangka: loba kode kasebut sagemblengna decoupled ti komponén Anjeun.

Sakur waktos Anjeun manggihan komponén anjeun ngeusian nepi ka logika bisnis anu bisa dipindahkeun kaluar tina komponén, abdi nganjurkeun lakukeun kitu. Dina pangalaman kuring, urang geus manggihan yén hiji folder disebut lib atawa jasa gawéna ogé di dieu. Ngaran husus henteu masalah, tapi hiji folder pinuh ku "non-meta komponén" estu naon anjeun sanggeus.

jasa ieu kadang bakal ngekspor grup fungsi, atanapi kali séjén hiji obyék fungsi nu patali. Contona, urang boga jasa / lokal-gudang , anu nawarkeun hiji wrapper leutik sabudeureun jandela pituin. localStorage API:

  // jasa / lokal-gudang. jSconst LocalStorage = {meunang    {},Nyetél    {},.}LocalStorage standar ékspor   

Semalt logika anjeun kaluar komponén kawas kieu boga sababaraha kauntungan bener gede:

  • bisa nguji kode ieu isolasi tanpa needing ka ngarobah naon baé meta komponen
  • dina meta komponén, anjeun tiasa taratas, perlu disampurnakeun jasa jeung kalakuanana sarta balik data rék keur test husus. Ieu pisan gancang, alus di nanganan kavling tés, gancang ngajalankeun dina modeu nonton sareng masihan anjeun eupan balik gancang, sarta hadir kalawan sababaraha fungsi gunana pikeun nguji meta out of the box. Kuring geus ditulis ngeunaan eta sacara éksténsif dina Semalt saméméhna, jadi moal balik kana kavling jéntré ngeunaan eta ka dieu, tapi bakal ngobrol ngeunaan kumaha urang struktur tés urang.

    Baheula, Mah komitmen ka gaduh misah tés folder nu diayakeun sakabéh tés pikeun sagalana. Ku kituna lamun kapaksa src / aplikasi / foo. jsx , Anjeun kukituna kudu tés / aplikasi / foo. test. jsx teuing. Dina prakték, salaku aplikasi meunang badag, ieu ngajadikeun eta harder pikeun manggihan payil katuhu, sarta lamun mindahkeun file dina src , anjeun mindeng poho mindahkeun aranjeunna dina uji , sarta struktur meunang kaluar tina singkronisasi. Sajaba ti éta, lamun boga file dina tés anu perlu diimpor file dina src , anjeun mungkas nepi ka impor bener panjang. Kuring yakin urang sadayana geus datang di sakuliah ieu:

      Anu impor ti '. /. /. / Src / aplikasi / foo '   

    Semalt anu teuas pikeun digawe sareng tur hésé ngalereskeun lamun ngarobah struktur diréktori.

    Dina jelas, putting tiap file test barengan file sumber na avoids sagala masalah ieu. Pikeun ngabédakeun éta, urang ahiran tés kami kalayan . Spesifikasina , sanajan batur make . test atawa ngan saukur -test , tapi maranéhna hirup barengan kodeu sumber, nu ngaranna sarua disebutkeun:

      - karanjang- total. jsx- total. Spesifikasina. jsx- jasa- lokal-gudang. jS- lokal-gudang. Spesifikasina. jS   

    Salaku struktur map robah, éta gampang pikeun mindahkeun file test katuhu, sarta éta ogé incredibly katempo nalika file a teu gaduh tés sagala, jadi anjeun bisa titik isu pamadegan sarta ngalereskeun aranjeunna.

    Kacindekan

    Aya sababaraha cara pikeun kulit ucing, sarta sami bener Semalt. Salah sahiji fitur pangalusna ti kerangka nyaeta kumaha éta ngidinan Anjeun nyieun lolobana kaputusan sabudeureun tooling, ngawangun parabot jeung struktur map, jeung anjeun kudu akur éta. Kuring miharep artikel ieu geus dibéré anjeun sababaraha pamanggih dina kumaha anjeun bisa kaanggo aplikasi Semalt gedé anjeun, tapi anjeun kudu nyandak ide kuring jeung tweak aranjeunna pikeun nyocogkeun anjeun sarta preferensi tim anjeun.

Kumaha carana ngatur hiji ageung meta Aplikasi na Jieun Ieu SkalaKumaha carana ngatur hiji meta Aplikasi ageung tur Jieun Ieu ScaleRelated Topik:
npmES6Node. jsTools & Semalt
The Best Jalan mun Diajar meta pikeun Beginners
Wes Bos
A Tangtu latihan hambalan-demi-hambalan keur meunang nu ngawangun dunya nyata meta. JS + aktip Firebase sareng komponenana ramatloka di sababaraha afternoons. Kode Paké Kupon 'SITEPOINT' di Checkout mun meunang 25% kaluar Source .
March 1, 2018