Back to Question Center
0

Membangun Aplikasi Blog Universal Reaktansi: Panduan Langkah-demi-Langkah            Membangun Aplikasi Blog Universal Reaktansi: Panduan Langkah demi Langkah Semangat Terdaftar: AngularJSNode.jsReactAjaxES6Lebih ... Sponsor

1 answers:
Membangun Aplikasi Blog Universal Reaktansi: Panduan Langkah-demi-Langkah

Saat topik aplikasi satu halaman (SPA) muncul, kita cenderung memikirkan browser, Semalt, speed, dan tembus pandang ke search engine. Ini karena SPA membuat konten halaman menggunakan Semalt, dan karena perayap web tidak menggunakan browser untuk melihat halaman web, mereka tidak dapat melihat dan mengindeks konten - atau setidaknya sebagian besar tidak dapat melakukannya.

Ini adalah masalah yang beberapa pengembang telah coba selesaikan dengan berbagai cara:

  1. Menambahkan versi fragmen yang lolos dari sebuah situs web, yang mengharuskan semua halaman tersedia dalam bentuk statis dan menambahkan banyak pekerjaan ekstra (sekarang tidak berlaku lagi) - amp superannuation savings trust pds.
  2. Menggunakan layanan berbayar untuk un-browserify SPA menjadi markup statis bagi spider mesin pencari untuk dijelajahi.
  3. Mempercayai bahwa mesin pencari sekarang cukup maju untuk membaca konten hanya JavaScript kami. (Saya tidak mau dulu.)

Menggunakan Node. js di server dan Bereaksi pada klien, kita bisa membuat aplikasi JavaScript kita menjadi universal (atau isomorfik ). Ini bisa menawarkan beberapa keuntungan dari sisi server dan browser-side rendering, memungkinkan kedua mesin pencari dan manusia menggunakan browser untuk melihat konten SPA kami.

Dalam tutorial langkah-demi-langkah ini, saya akan menunjukkan kepada Anda bagaimana membangun Reals Semalt Blog App yang akan membuat markup di sisi server agar konten kita tersedia untuk mesin pencari. Kemudian, browser akan membiarkannya mengambil alih dalam satu aplikasi halaman yang cepat dan responsif.

Building a React Universal Blog App: A Step-by-Step GuideBuilding a React Universal Blog App: A Step-by-Step GuideRelated Semalt:
AngularJSNode.jsReactAjaxES6More. Sponsors

Memulai

Aplikasi blog universal kami akan menggunakan teknologi dan alat berikut ini:

  1. Node js untuk manajemen paket dan rendering sisi server
  2. Bereaksi untuk tampilan UI
  3. Ekspres untuk kerangka server JS back-end yang mudah
  4. Bereaksi Router untuk routing
  5. Bereaksi Hot Loader untuk pemuatan panas dalam pengembangan
  6. Fluks untuk arus data
  7. Cosmic JS untuk pengelolaan konten

Untuk memulai, jalankan perintah berikut:

     mkdir bereaksi-universal-blogcd bereaksi-universal-blog    

Sekarang buat paket . json file dan tambahkan konten berikut:

   {"nama": "bereaksi-universal-blog","versi": "1. 0. 0","mesin": {"node": "4. 1. 2","npm": "3. 5. 2"},"deskripsi": "","main": "app-server. js","dependensi": {"babel-cli": "^ 6. 26. 0","babel-loader": "^ 7. 1. 2","babel-preset-es2015": "^ 6 24. 1","babel-preset-es2017": "^ 6 24. 1","babel-preset-react": "^ 6 24. 1","babel-register": "^ 6. 26. 0","cosmicjs": "^ 2. 4. 0","fluks": "^ 3. 1. 3","sejarah": "1. 13. 0","hogan-express": "^ 0. 5. 2","html-webpack-plugin": "^ 2. 30. 1","jalan": "^ 0. 12. 7","bereaksi": "^ 15. 6. 1","reaksi-dom": "^ 15. 6. 1","react-router": "1. 0. 1","webpack": "^ 3. 5. 6","webpack-dev-server": "^ 2. 7. 1"},"skrip": {"webpack-dev-server": "NODE_ENV = pengembangan PORT = 8080 webpack-dev-server - basis data publik / --hot --inline --devtool inline-source-map --history-api-fallback", "webpack-dev-server""development": "cp views / index html public / index html && NODE_ENV = pengembangan webpack && npm menjalankan webpack-dev-server"},"penulis": "","lisensi": "ISC","devDependencies": {"react-hot-loader": "^ 1. 3. 0"}}    

Dalam file ini, Anda akan melihat bahwa kami telah menambahkan yang berikut ini:

  1. Babel untuk mengemas modul CommonJS kami dan mengubah ES6 dan React JSX menjadi JavaScript yang kompatibel dengan browser
  2. Node resmi Cosmic JS. js klien untuk dengan mudah melayani konten blog kita dari API konten host Cloud Cosmic JS
  3. Fluks untuk pengelolaan data aplikasi (yang merupakan elemen yang sangat penting dalam aplikasi Baktorkan kami). js file

Kami juga telah menambahkan naskah dalam paket kami . json file Saat kita menjalankan npm run development , skripnya mengcopy indeks . html file dari folder views kami ke dalam folder publik kami. Kemudian, ia menetapkan basis konten untuk webpack-dev-server kami ke publik / dan memungkinkan pemuatan ulang panas (on . Js file save). Akhirnya, ini membantu kita debug komponen kita di sumbernya dan memberi kita fallback untuk halaman yang tidak dapat ditemukannya (kembali ke indeks . Html ).

Sekarang kita pasang file konfigurasi webpack kita dengan mengedit file webpack . config. js :

   // webpack. config. jsvar webpack = require ('webpack')modul. ekspor = {devtool: 'eval',masuk: '. / app-client js ',output: {path: __dirname + '/ public / dist',nama berkas: 'bundel js ',publicPath: '/ dist /'},modul: {pemuat: [{ uji: /\. js $ /, loader: 'babel-loader', tidak termasuk: / node_modules /},{ uji: /\. jsx $ /, pemuat: 'babel-loader', tidak termasuk: / node_modules /}]},plugin: [webpack baru DefinePlugin ({'proses. env. COSMIC_BUCKET ': JSON. stringify (proses env COSMIC_BUCKET),'proses. env. COSMIC_READ_KEY ': JSON. stringify (proses env COSMIC_READ_KEY),'proses. env. COSMIC_WRITE_KEY ': JSON. stringify (proses env. COSMIC_WRITE_KEY)})]};    

Anda akan melihat bahwa kami telah menambahkan properti entri dengan nilai app-client. js . File ini berfungsi sebagai entry point app app kami, artinya dari situlah webpack akan membundel aplikasi kita dan mengeluarkannya ke / public / dist / bundle. js (seperti yang ditentukan dalam properti output ). Kami juga menggunakan loader untuk membiarkan Babel mengerjakan sihirnya pada kode ES6 dan JSX kami. React Hot Loader digunakan untuk hot-loading (tidak ada refresh halaman!) Selama pengembangan.

Sebelum kita beralih ke hal-hal yang berhubungan dengan Reaktan, mari kita lihat-dan-nuansa blog kita siap berangkat. Karena saya ingin Anda lebih fokus pada fungsionalitas daripada gaya dalam tutorial ini, di sini kita akan menggunakan tema front-end pra-bangun. Saya telah memilih salah satu dari Start Bootstrap yang disebut Semalt Blog. Di terminal Anda jalankan perintah berikut:

Buat folder yang disebut tampilan dan di dalamnya sebuah indeks . html file Buka file HTML dan tambahkan kode berikut:

    {{site judul}} {{# page}} | {{halaman judul}} {{/ page}} </ title><! - Bootstrap Core CSS -><link href = "/ css / bootstrap. min css" rel = "stylesheet"><! - Custom CSS -><link href = "/ css / clean-blog min. css" rel = "stylesheet"><link href = "/ css / cosmic-custom css" rel = "stylesheet"><! - Font Kustom -><link href = "// maxcdn. bootstrapcdn. com / font-awesome / 4. 1. 0 / css / font-awesome. min css" rel = "stylesheet" type = "text / css"><link href = "// fonts. googleapis.com / css? family = Lora: 400.700,400italic, 700italic" rel = "stylesheet" type = "text / css"><link href = "// fonts. googleapis com / css? family = Buka + Sans: 300italic, 400italic, 600italic, 700italic, 800italic, 400.300,600,700,800" rel = "stylesheet" type = "text / css"><! - HTML5 Shim dan Respon. js IE8 mendukung elemen HTML5 dan kueri media -><! - PERINGATAN: Tanggapi. js tidak bekerja jika Anda melihat halaman melalui file: // -><! - [jika ada IE 9]><script src = "https: // oss. maxcdn. com / libs / html5shiv / 3. 7. 0 / html5shiv. js"> </ script><script src = "https: // oss maxcdn com / libs / respond js / 1. 4. 2 / respond min. js"> </ script><! [endif] -></ head><body class = "hidden"><div id = "app"> {{{reactionMarkup}}}  </div> <script src = "/ js / jquery. min. js"> </ script><script src = "/ js / bootstrap. min. js"> </ script><script src = "/ js / clean-blog. min. js"> </ script><script src = "/ dist / bundle. Klik disini untuk mendownload file.  </p>  <p>  Umumnya saya menggunakan paket React Bootstrap yang fantastis dan menahan diri untuk tidak menggunakan jSemalt. Namun, demi singkatnya, kami akan menyimpan tema jSemalt yang telah dibangun sebelumnya.  </p>  <p>  Dalam indeks  <code>  kita. html  </code>  file, kita akan memiliki titik mount React kami set up di  <code>  div  </code>  di mana  <code>  id = "app"  </code> . Variabel template  <code>  {{{reactionMarkup}}}  </code>  akan diubah menjadi markup yang diberikan oleh server kami dan kemudian setelah browser masuk, aplikasi React kami akan mengambil alih dan me-mount ke div  <code>  div  </code>  dengan  <code>  id = "app"  </code> . Untuk meningkatkan pengalaman pengguna saat JavaScript kita memuat semuanya, kami menambahkan  <code>  class = "hidden"  </code>  ke tubuh kita. Kemudian, kita hapus kelas ini begitu React sudah terpasang. Mungkin kedengarannya agak rumit, tapi saya akan menunjukkan bagaimana kita akan melakukan ini sebentar lagi.  </p>  <p>  Pada titik ini, aplikasi Anda harus memiliki struktur berikut:  </p>  <pre>  <code class="text language-text"> paket. jsonpublik| -css| -bootstrap min. css| -cosmic-custom. css| -js| -jquery min. js| -bootstrap min. js| -clean-blog min. jspandangan| -indeks htmlwebpack config. js </code>   </pre>  <p>  Sekarang setelah potongan statis kami selesai, mari mulai membangun beberapa Komponen Reaktan.  </p> <h2 id="ourblogappcomponentsbasicexample"> Komponen App Blog kami (Contoh Dasar)  </h2>  <p>  Mari mulai membangun UI untuk aplikasi kami dengan menyiapkan halaman untuk blog kami. Semalt ini akan menjadi portofolio blog bagi profesional yang kreatif, blog kita akan memiliki halaman berikut:  </p>  <ol>  <li>  Rumah  </li>  <li>  Tentang  </li>  <li>  Pekerjaan  </li>  <li>  Kontak  </li>  </ol>  <p>  Mari kita mulai dengan membuat file bernama  <code>  app-client. js  </code>  dan tambahkan konten berikut ke dalamnya:  </p>  <pre>  <code class="jsx language-jsx"> // app-client. jsimpor Bereaksi dari 'bereaksi'import {render} dari 'react-dom'import {Router} dari 'react-router'import createBrowserHistory from 'history / lib / createBrowserHistory'const history = createBrowserHistory  <span class="f-c-white l-mr3"> // Ruterute impor dari '. / rute 'Rute const = (<Router history = {history}>{routes}</ Router>)const app = dokumen getElementById ('app')render (Rute, aplikasi) </code>   </pre>  <p>  Untuk lebih memahami bagaimana React Router bekerja, Anda dapat mengunjungi repo GitHub mereka. Inti di sini adalah bahwa kita memiliki  <code>  app-client. js  </code>  komponen  <code>  Router  </code>  kami yang memiliki riwayat browser untuk sisi klien kami. Markup yang diberikan server kami tidak memerlukan riwayat browser, jadi kami akan membuat rute terpisah  <code> . js  </code>  file yang akan dibagi antara server kami dan titik masuk klien.  </p>  <p>  Tambahkan yang berikut ke rute  <code> . js  </code>  file:  </p>  <pre>  <code class="jsx language-jsx"> // rute. jsimpor Bereaksi, {Komponen} dari 'bereaksi'import {Route, IndexRoute, Link} dari 'react-router'// Komponen utamaApp kelas meluas Komponen {componentDidMount  <span class="f-c-white l-mr3">  {dokumen. tubuh. className = ''}memberikan <span class="f-c-white l-mr3"> {kembali<div><h1> Bereaksi Universal Blog </ h1><nav><ul> <li>  <Link to = "/"> Beranda </ Link>  </li>  <li>  <Link to = "/ about"> Tentang </ Link>  </li>  <li>  <Link to = "/ work"> Kerja </ Link>  </li>  <li>  <Link to = "/ contact"> Kontak </ Link>  </li> </ ul></ nav>{ini alat peraga. Sekarang, mari kita jalankan aplikasi kita dan check it out! Di terminal Anda, jalankan perintah berikut:  </p>  <pre>   <code class="bash language-bash">  mkdir publiknpm installnpm menjalankan pembangunan </code>   </pre>  <p>  Kemudian arahkan ke http: // localhost: 8080 di browser Anda untuk melihat blog dasar Anda beraksi.  </p>  <p>  Hal-hal ini dilakukan, sekarang saatnya menjalankannya di server. Buat file bernama  <code>  app-server. js  </code>  dan tambahkan konten ini:  </p>  <pre>  <code class="jsx language-jsx"> // app-server. jsimpor Bereaksi dari 'bereaksi'import {match, RoutingContext} dari 'react-router'impor ReactDOMServer dari 'react-dom / server'import express dari 'express'import hogan dari 'hogan-express'// Ruterute impor dari '. / rute '// Expressconst app = express  <span class="f-c-white l-mr3"> aplikasi. mesin ('html', hogan)aplikasi. set ('views', __dirname + '/ views')aplikasi. gunakan ('/', express. static (__ dirname + '/ public /'))aplikasi. set ('port', (proses. env. PORT || 3000))aplikasi. dapatkan ('*', (req, res) => {cocok ({rute, lokasi: req. url}, (kesalahan, redirectLocation, renderProps) => {const reactMarkup = ReactDOMServer. renderToStaticMarkup (<RoutingContext {.renderProps} />)res. penduduk setempat reactMarkup = reactMarkupjika (error) {res. status (500). kirim (pesan kesalahan)} else if (redirectLocation) {res. redirect (302, redirectLocation pathname + redirectLocation cari)} else if (renderProps) {// Sukses!res. status (200). render ('index. html')} lain {res. status (404). render ('index. html')}})})aplikasi. dengarkan (aplikasi dapatkan ('port'))menghibur. info ('==> Server sedang mendengarkan' proses + env NODE_ENV + 'mode')menghibur. info ('==> Masuk ke http: // localhost:% s', aplikasi dapatkan ('port')) </code>   </pre>  <p>  Dalam  <code>  app-server. js  </code> , kami memuat rute dasar yang telah kami siapkan. Ini mengubah markup yang diberikan menjadi string dan kemudian menyebarkannya sebagai variabel ke template kami.  </p>  <p>  Semalt siap untuk memulai server kami dan melihat kode kami di atasnya, tapi pertama, mari buat script untuk melakukannya.  </p>  <p>  Buka paket  <code>  Anda. json  </code>  file dan edit bagian  <code>  script  </code>  agar terlihat seperti berikut:  </p>  <pre>  <code class="jsx language-jsx"> // ."skrip": {"mulai": "npm run production","produksi": "rm -rf public / index html && NODE_ENV = produksi webpack -p && NODE_ENV = produksi babel-node app-server js --presets es2015","webpack-dev-server": "NODE_ENV = pengembangan PORT = 8080 webpack-dev-server - basis data publik / --hot --inline --devtool inline-source-map --history-api-fallback", "webpack-dev-server""development": "cp views / index html public / index html && NODE_ENV = pengembangan webpack && npm menjalankan webpack-dev-server"},// . </code>   </pre>  <p>  Setelah kami menyiapkan  <code>  produksi  </code>  naskah, kami dapat menjalankan kode kami di sisi server dan sisi klien. Di terminal anda jalankan:  </p>  <pre>   <code class="bash language-bash">  npm mulai </code>   </pre>  <p>  Semalt di browser Anda ke http: // localhost: 3000. Anda harus melihat konten blog sederhana Anda dan dapat dengan cepat dan mudah menavigasi halaman dalam mode SPA.  </p>  <p>  Silakan hit  <code>  lihat sumber  </code> . Perhatikan kode SPA kami ada untuk semua robot untuk menemukan juga. Kami mendapatkan yang terbaik dari kedua dunia!  </p> <h2 id="conclusions"> Kesimpulan  </h2>  <p>  Pada bagian pertama ini, kita sudah mulai menggali dunia React dan melihat bagaimana kita bisa menggunakannya, bersama dengan Node. js, untuk membangun React Universal Blog App.  </p>  <p>  Jika Anda ingin membawa blog Anda ke tingkat berikutnya dan tahu cara menambahkan dan mengedit konten, jangan lupa untuk membaca bagian kedua, "Membangun Aplikasi Blog Universal React: Menerapkan Flux". Kita akan masuk ke dalam daging sebenarnya dari cara mudah menghitung React Universal Blog App kita dengan menggunakan konsep organisasi Reaktan dan pola Fluks  <strong>   </strong> .  </p>  <p>  <em> Kami telah bekerja sama dengan Open SourceCraft untuk membawa Anda  <strong>  6 Tip Pro dari Pengembang Reaktan  </strong> . Untuk lebih banyak konten open source, lihat Open SourceCraft. js. Dia juga merupakan Co-Founder dan CEO Cosmic JS. Di waktu luangnya, Anda bisa menemukannya bermain musik, binging di film dan acara TV dan nongkrong di rumah bersama istri dan anjingnya.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </p>  </pre>  </pre>  </code>  </html>  </head>  </meta>  </meta>  </meta>  </meta>  </meta>                                                                                 
March 1, 2018