Back to Question Center
0

طراحی یک برنامه جهانی وب React: راهنمای گام به گام            ساخت یک برنامه جهانی وب React: یک راهنمای گام به گام Semalt: AngularJSNode.jsReactAjaxES6More ... حامیان

1 answers:
ساخت یک برنامه جهانی وب React: راهنمای گام به گام

هنگامی که موضوع برنامه های تک صفحه (SPAs) می آید، ما تمایل به مرورگرها، Semalt، سرعت و نامرئی برای موتورهای جستجو می بینیم. این به این دلیل است که یک SPA با استفاده از Semalt از محتوای صفحه استفاده میکند و از آنجایی که خزندههای وب از مرورگر برای مشاهده صفحات وب استفاده نمیکنند، نمیتوانند محتوای آنها را مشاهده و فهرست کنند - یا حداقل برخی از آنها نمیتوانند.

این یک مشکل است که برخی از توسعه دهندگان تلاش کرده اند راه حل های مختلف را حل کنند:

  1. اضافه کردن یک نسخه از فرمت فرار از وب سایت، که نیاز به تمام صفحات در دسترس است به صورت استاتیک و اضافه می کند بسیاری از کار اضافی (در حال حاضر ضعیف) - digiprint and.
  2. با استفاده از یک سرویس پرداختی برای بازنویسی SPA به علامت ایستایی برای عنکبوت موتور جستجو برای خزیدن.
  3. اعتقاد بر اینکه موتورهای جستجو در حال حاضر به اندازه کافی پیشرفته برای خواندن محتوای جاوا اسکریپت ما است. (من دیگر نخواهم بود.)

با استفاده از گره. Js در سرور و React on client، ما می توانیم برنامه جاوا اسکریپت را به صورت universal (یا isomorphic ) ایجاد کنیم. این می تواند مزایای متعددی از پردازشگر جانبی و سمت سرور ارائه دهد، که به موتور جستجو و انسان اجازه استفاده از مرورگرها برای مشاهده محتوای SPA خود را می دهد.

در این آموزش گام به گام، من به شما نشان خواهم داد که چگونه یک برنامه Blog React Semalt ایجاد کنید که ابتدا نشانگر را در سمت سرور ایجاد می کند تا محتوای ما را برای موتورهای جستجو در دسترس قرار دهد. سپس، مرورگر را به یک صفحه یک صفحه تبدیل می کند که هر دو سریع و پاسخگو است.

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

شروع

برنامه جهانی وبلاگ ما از فن آوری های زیر استفاده می کند:

  1. گره js برای مدیریت بسته و ارائه رندر سرور
  2. برای دیدگاههای UI واکنش نشان دهید
  3. اکسپرس برای چارچوب سرویس گیرنده JS back end آسان
  4. روتر روتر برای مسیریابی
  5. لودر داغ برای بارگیری گرم در حال توسعه
  6. جریان برای جریان داده
  7. Cosmic JS برای مدیریت محتوا

برای شروع، دستورات زیر را اجرا کنید:

     mkdir re-universal-blogسی دی واکنش جهانی-وبلاگ    

حالا یک بسته ایجاد کنید. json فایل و محتوای زیر را اضافه کنید:

   {"نام": "واکنش جهانی وبلاگ""نسخه": "0. 0. 0"،"موتور": {"گره": "4. 1. 2"،"npm": "3. 5 2"}،"شرح": ""،"اصلی": "app-server. js""وابستگی": {"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"،"بابل ثبت نام": "^ 6. 26. 0"،"cosmicjs": "^ 2 .4. 0"،"شار": "^ 3 .1 3"،"تاریخ": "1. 13. 0"،"hogan-express": "^ 0 .5 2"،"html-webpack-plugin": "^ 2 .30. 1"،"مسیر": "^ 0.12.7"،"واکنش": "^ 15 .6.1"،"واکنش دومی": "^ 15.6.1"،"reactor-router": "1. 0. 1"،"webpack": "^ 3 .5 .6"،"webpack-dev-server": "^ 2 7. 1"}،"اسکریپت ها": {"webpack-dev-server": "NODE_ENV = development PORT = 8080 webpack-dev-server --content-base public / --hot --inline --devtool inline-source-map -history-api-fallback""development": "cp views / index. html public / index. html && NODE_ENV = webpack development & & npm runpack-dev-server"}،"نویسنده": ""،"مجوز": "ISC""devDependencies": {"واکنش داغ لودر": "^ 1 .3. 0"}}    

در این فایل، متوجه خواهید شد که ما موارد زیر را اضافه کرده ایم:

  1. بابل به ماژول های CommonJS ما بسته است و ما ES6 و React JSX را به جاوا اسکریپت سازگار با مرورگر تبدیل می کنیم
  2. گره رسمی کیهانی JS. مشتری جی اس اس به راحتی در محتوی وبلاگ ما از API محتوی ابر میزبان کیهانی JS خدمت می کند
  3. شار برای مدیریت داده های برنامه (که یک عنصر بسیار مهم در برنامه React ما است). js فایل.

ما همچنین در بسته یک اسکریپت اضافه کردیم. json فایل. هنگامی که ما اجرا npm اجرا توسعه ، اسکریپت شاخص را کپی می کند. فایل html از پرونده ما views به پوشه عمومی ما ما. سپس js فایل را ذخیره می کند (پایگاه داده) webpack-dev-server به public / ما را تنظیم می کند. در نهایت، به ما کمک می کند که مولفه های ما را در منبع پاک کنیم و به ما اجازه می دهد که صفحاتی را پیدا کنیم که نمیتوانند پیدا کنند (html ).

حالا فایل پیکربندی webpack ما را با ویرایش فایل webpack تنظیم کنید. پیکربندی js :

   / // webpack. پیکربندی جسدvar webpack = require ('webpack')ماژول export = {devtool: 'eval'ورودی: '. / app-client جی اس "خروجی: {مسیر: __ نام + + / public / dist،نام فایل: بسته نرم افزاری جی اس "publicPath: '/ dist /'}،ماژول: {باربرها: [{ تست: /\. js $ /، loaders: 'babel-loader'، exclude: / node_modules /}{ تست: /\. jsx $ /، loaders: 'babel-loader'، exclude: / node_modules /}]}،پلاگین ها: [webpack جدید DefinePlugin ({'روند. env COSMIC_BUCKET ': JSON. stringify (فرآیند env. COSMIC_BUCKET)،'روند. env COSMIC_READ_KEY: JSON. stringify (فرآیند env.COSMIC_READ_KEY)،'روند. env COSMIC_WRITE_KEY ': JSON. stringify (process env.COSMIC_WRITE_KEY)})]}؛    

متوجه خواهید شد که یک دارایی ورودی با ارزش برنامه-مشتری اضافه کردیم. js . این فایل به عنوان نقطه ورود مشتری ما به برنامه عمل می کند، به این معنی که از این لحظه webpack برنامه ما را بسته و خروجی آن را به / public / dist / bundle می برد. js (همانطور که در ویژگی خروجی مشخص شده است). ما همچنین از لودرها استفاده می کنیم تا اجازه داده شود بابل سحر و جادو خود را در کد ES6 و JSX ما کار کند. Hot Loader React Hot Loader در حین توسعه، بدون بارگذاری صفحه، استفاده می شود.

قبل از اینکه ما به مسائل مربوط به React برویم، بگذارید نگاه و احساس وبلاگ ما را آماده کنیم. از آنجا که من دوست دارم که بیشتر تمرکز خود را نسبت به سبک در این آموزش تمرکز کنید، در اینجا از یک موضوع جلویی پیش ساخته استفاده خواهیم کرد. من یکی از Start Bootstrap را به نام Semalt Blog انتخاب کردم. در ترمینال شما دستورات زیر را اجرا کنید:

ایجاد یک پوشه به نام نمایش و در داخل آن یک شاخص. html فایل. فایل HTML را باز کنید و کد زیر را اضافه کنید:

    {{سایت. عنوان}} {{# page}} | {{صفحه عنوان}} {{/ page}} </ title><! - Bootstrap Core CSS -><link href = "/ css / bootstrap.min css" rel = "stylesheet"><! - سفارشی CSS -><link href = "/ css / clean-blog. min css" rel = "stylesheet"><link href = "/ css / cosmic-custom. css" rel = "stylesheet"><! - فونت های سفارشی -><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 = لورا: 400،700،400italic، 700italic" rel = "stylesheet" type = "text / css"><link href = "// fonts. googleapis. com / css؟ family = باز کردن + بدون: 300italic، 400italic، 600italic، 700italic، 800italic، 400،300،600،700،800" rel = "stylesheet" type = "text / css"><! - HTML5 Shim و پاسخ. پشتیبانی یاهو IE8 از عناصر HTML5 و پرس و جوهای رسانه ای -><! - WARNING: پاسخ js اگر صفحه شما را از طریق فایل ببینید: // -> کار نمی کند<! - [اگر آن IE 9]><script src = "https: // oss. maxcdn. com / libs / html5shiv / 3. 3. 0 / html5shiv. js"> </ script><script src = "https: // oss. maxcdn. com / libs / reply. js / 1. 4. 2 / reply. min. js"> </ script><! [endif] -></ head><class body = "hidden"><div id = "app"> {{{reactMarkup}}}  </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 / بسته نرم افزاری. برای دانلود فایل ها اینجا را کلیک کنید  </p>  <p>  به طور کلی من از Packet React Bootstrap فوق العاده استفاده می کنم و از استفاده از jSemalt خودداری می کنم. با این حال، به خاطر شفافیت، ما ویژگی های پیش ساخته شده jSemalt را حفظ خواهیم کرد.  </p>  <p>  در فهرست  <code>  ما.  </code>  فایل html  </code>  ما نقطه اتصال React ما را در  <code>  div  </code>  که در آن  <code>  id = "app"  </code>  تنظیم شده است، داریم. متغیر قالب  <code>  {{{reactMarkup}}}  </code>  به نشانه گذاری رندر شده ما تبدیل می شود و پس از آنکه یک مرورگر در آن وارد شود، برنامه React ما را به  <code>  div  </code>  با  <code>  id = "برنامه"  </code> . برای بهبود تجربه کاربر در حالی که جاوا اسکریپت همه چیز را بارگذاری می کند، ما  <code>  class = "hidden"  </code>  را به بدن ما اضافه می کنیم. سپس ما این کلاس را هنگامی که React نصب کرده ایم حذف می کنیم. ممکن است کمی پیچیده باشد اما من به شما نشان خواهم داد که چگونه این کار را در یک دقیقه انجام خواهیم داد.  </p>  <p>  در این مرحله، برنامه شما باید ساختار زیر داشته باشد:  </p>  <pre>  <code class="text language-text"> بسته. جسونعمومی| -css| بوت استرپ دقیقه CSS| سفارشی کاسمیک CSS| -js| -جکیری دقیقه جسد| بوت استرپ دقیقه جسد| پاک کردن وبلاگ دقیقه جسدنمایش ها| -index htmlwebpack پیکربندی جسد </code>   </pre>  <p>  اکنون که ما قطعات قطعه ما را انجام داده ایم، شروع به ساخت بعضی از اجزای React می کنیم.  </p> <h2 id="ourblogappcomponentsbasicexample"> اجزای برنامه وبلاگ ما (مثال اصلی)  </h2>  <p>  شروع به ساخت رابط کاربری برای برنامه ما با تنظیم صفحات برای وبلاگ ما. Semalt این یک وبلاگ تخصصی برای حرفه ای خلاق است، وبلاگ ما صفحات زیر را دارد:  </p>  <ol>  <li>  خانه  </li>  <li>  درباره  </li>  <li>  کار  </li>  <li>  تماس  </li>  </ol>  <p>  با ایجاد یک فایل به نام  <code>  app-client شروع می کنیم. js  </code>  و محتوای زیر را به آن اضافه کنید:  </p>  <pre>  <code class="jsx language-jsx"> // app-client. جسدواردات واکنش نشان می دهدimport {render} از 'react-dom'وارد کردن {روتر} از 'reactor-router'وارد کردن createBrowserHistory از 'history / lib / createBrowserHistory'const history = createBrowserHistory  <span class="f-c-white l-mr3"> // مسیرهامسیرهای واردات از '. / مسیرهاconst Routes = (<روتر روتر = {تاریخ}>{مسیرها}</ Router>)const app = سند getElementById ('برنامه')رندر (مسیرها، برنامه) </code>   </pre>  <p>  برای درک بهتر اینکه چگونه روتر Router کار می کند، می توانید از repos GitHub خود بازدید کنید. در اینجا این است که ما در  <code>  app-client داریم. js  </code>  component  <code>  our  <code>  router  </code>  که دارای تاریخچه مرورگر برای مسیریابی مشتری ما است. نشانه گذاری رندر شده ما به تاریخ مرورگر نیازی ندارد، بنابراین ما یک مسیر جداگانه  <code>  ایجاد خواهیم کرد. js  </code>  فایل بین سرور و نقاط ورود مشتری ما مشترک است.  </p>  <p>  مسیرهای  <code>  زیر را اضافه کنید. js  </code>  file:  </p>  <pre>  <code class="jsx language-jsx"> // مسیرها. جسدواردات React، {Component} از 'واکنش'import {Route، IndexRoute، Link} از 'reac-router'// جزء اصلیبرنامه کلاس گسترش کامپوننت {componentDidMount  <span class="f-c-white l-mr3">  {اسناد بدن className = ''}رندر  <span class="f-c-white l-mr3">  {برگشت (<div><h1> واکنش جهانی جهانی </ h1><nav><ul> <li>  <Link to = "/"> صفحه اصلی </ Link>  </li>  <li>  <Link to = "/ about"> درباره </ Link>  </li>  <li>  <Link to = "/ work"> کار </ Link>  </li>  <li>  <Link to = "/ contact"> تماس </ link>  </li> </ ul></ nav>{ این. غرفه ها. اکنون، بیایید برنامه ما را اجرا کنیم و آن را بررسی کنیم! در ترمینال شما، دستورات زیر را اجرا کنید:  </p>  <pre>   <code class="bash language-bash">  mkdir عمومینصب npmتوسعه npm اجرا شود </code>   </pre>  <p>  سپس در مرورگر خود به http: // localhost: 8080 بروید تا وبلاگ اصلی خود را در عمل ببینید.  </p>  <p>  این کارها انجام شده است، اکنون وقت این است که این کار را روی سرور انجام دهیم. یک فایل به نام  <code>  app-server ایجاد کنید. js  </code>  و اضافه کردن این مطالب:  </p>  <pre>  <code class="jsx language-jsx"> // app-server. جسدواردات واکنش نشان می دهدimport {match، RoutingContext} از 'react-router'وارد کردن ReactDOMServer از 'react-dom / server'واردات بیان از 'بیان'واردات hogan از 'hogan-express'// مسیرهامسیرهای واردات از '. / مسیرها// بیانconst app = express  <span class="f-c-white l-mr3"> برنامه موتور ('html'، hogan)برنامه set ('views'، __dirname + '/ views')برنامه استفاده کنید ('/'، بیان. static (__ dirname + '/ public /'))برنامه set ('port'، (process. env. PORT || 3000))برنامه دریافت ('*'، (req، res) => {مطابقت ({مسیرها، مکان: آدرس مجاز}، (خطا، redirectLocation، renderProps) => {const reactMarkup = ReactDOMServer. renderToStaticMarkup (<RoutingContext {.renderProps} />)رز مردم محلی reactMarkup = reactMarkupاگر (خطا) {رز وضعیت (500). ارسال (خطا پیام)} else if (redirectLocation) {رز تغییر مسیر (302، redirect locator pathname + redirect locating search)} else if (renderProps) {// موفقیترز وضعیت (200). رندر ('index.html')} else {رز وضعیت (404). رندر ('index.html')}})})برنامه گوش دادن (برنامه دریافت (پورت))کنسول. info ('==> سرور در فرایند + env. NODE_ENV +' listen 'می شود)کنسول. info ('==> به http: // localhost:٪ s'، برنامه دریافت کنید ('port')) </code>   </pre>  <p>  در  <code>  برنامه سرور. js  </code> ، ما مسیرهای اساسی را که ما تنظیم کرده ایم، بارگیری می کنیم. اینها نشانه گذاری رندر را به یک رشته تبدیل می کنند و سپس آن را به عنوان یک متغیر به قالب ما منتقل می کنند.  </p>  <p>  Semalt آماده برای شروع سرور ما و مشاهده کد ما در آن، اما ابتدا، اجازه دهید یک اسکریپت برای انجام این کار ایجاد کنیم.  </p>  <p>  بسته خود را  <code>  باز کنید. json  </code>  فایل و بخش  <code>  اسکریپت  </code>  را ویرایش کنید تا به موارد زیر نگاه کنید:  </p>  <pre>  <code class="jsx language-jsx"> // ."اسکریپت ها": {"شروع": "تولید npm اجرا""تولید": "rm -rf public / index. html && NODE_ENV = تولید webpack -p && NODE_ENV = تولید برنامه babel-node server js - presets es2015""webpack-dev-server": "NODE_ENV = development PORT = 8080 webpack-dev-server --content-base public / --hot --inline --devtool inline-source-map -history-api-fallback""development": "cp views / index. html public / index. html && NODE_ENV = webpack development & & npm runpack-dev-server"}،// . </code>   </pre>  <p>  حالا که ما  <code>  تولید  </code>  اسکریپت را راه اندازی کردیم، می توانیم کد ما را روی سرور و طرف سرویس دهنده اجرا کنیم. در ترمینال شما اجرا می شود:  </p>  <pre>   <code class="bash language-bash">  شروع npm </code>   </pre>  <p>  Semalt در مرورگر خود به http: // localhost: 3000. شما باید مطالب وبلاگ خود را ساده ببینید و قادر به سرعت و به راحتی از طریق صفحات در حالت SPA حرکت کنید.  </p>  <p>  برو جلو و ضربه  <code>  نمایش منبع  </code> . توجه داشته باشید کد SPA ما برای همه روبات ها نیز وجود دارد. ما بهتر از هر دو جهان هستیم!  </p> <h2 id="conclusions"> نتیجه گیری  </h2>  <p>  در این بخش اول، ما شروع به حفاری در دنیای React کرده ایم و ببینید که چگونه می توانیم از آن استفاده کنیم، همراه با Node. جی اس، برای ساخت یک برنامه وبلاگ جهانی React.  </p>  <p>  اگر می خواهید وبلاگ خود را به سطح بعدی برسانید و بدانید که چگونه می توانید محتوا را اضافه کنید و ویرایش کنید، فراموش نکنید قسمت دوم، «ایجاد یک برنامه وبلاگ جهانی رات: پیاده سازی شار» را بخوانید. ما به گوشت واقعی چگونگی به راحتی ما برنامه React Universal Blog را با استفاده از واکنش سازمانی مفاهیم و  <strong>  الگوی شار  </strong> .  </p>  <p>  <em> ما با Open SourceCraft همکاری کردیم  <strong>  6 نکات طرفدار از React Developers  </strong> . برای محتوای منبع باز بیشتر، باز کردن SourceCraft را بررسی کنید. جسد او همچنین موسس و مدیر عامل شرکت Cosmic JS است. در وقت آزاد او می توانید او را در حال پخش موسیقی، بینگ در فیلم ها و نمایش های تلویزیونی و حل و فصل در خانه با همسر و سگ خود را پیدا کنید.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </p>  </pre>  </pre>  </code>  </html>  </head>  </meta>  </meta>  </meta>  </meta>  </meta>                                                                               
March 1, 2018