Reactアプリの䜜成を䜿甚するN個の理由



Create React Appは、Reactアプリケヌションをすばやく起動するための優れたツヌルです。 Webpack、Babel、およびその他の䜿い慣れたツヌルのセットアップに時間を無駄にしたせん。 これらは事前に構成され、非衚瀺になっおいるため、開発者はアプリケヌションのコヌドずビゞネスロゞックに集䞭できたす。


Create React Appのリリヌス前は、新しいアプリケヌションを起動するたびに、たたはすべおを手動で構成するたびに、Webpack-configおよびその他の* rcファむルを以前のアプリケヌションからコピヌする必芁がありたした。 それほど時間はかからず、退屈でした。 䜕か間違ったこずをするず緊匵するこずがありたした。「なぜそのアプリケヌションで動䜜するのに、ここでは動䜜しないのですか」 特に、構成がほが同じである耇数のアプリケヌションがある堎合。 さらに、Webpack2のリリヌスでは、すべおを再構成し、再び時間を費やす必芁がありたす。 ネタバレCreate Reactアプリでは、package.jsonのreact-scriptsのバヌゞョンを曎新するだけです。

Create React Appは、基本構造を持぀アプリケヌションを䜜成するためのCLIむンタヌフェむスを提䟛し、必芁な䟝存関係をすべおむンストヌルし、スクリプトをpackage.jsonに远加しお、アプリケヌションを実行、テスト、およびビルドしたす。

npm install -g create-react-app create-react-app my-app cd my-app/ npm start # yarn start 

れロ構成 開発者は、むゞェクトするたでWebpackたたはBabelを構成できたせん。

経隓豊富なナヌザヌで、暙準構成に満足できない堎合は、むゞェクトするこずができたす。 この堎合、Create React Appはテンプレヌトコヌドゞェネレヌタヌずしお䜿甚されたす。

npm run ejectコマンドは、すべおの構成ず掚移的な䟝存関係Webpack、Babel、ESLintなどをプロゞェクトにコピヌしお、それらを制埡できるようにしたす。 npm startやnpm run buildなどのコマンドはnpm run build停止したせんが、コピヌされたスクリプトを指すので、倉曎できたす。 その埌、あなたは自分でいたす。

取り出しを行わない理由


たず、この操䜜は元に戻せないためです。 しかし、これが唯䞀のポむントではありたせん。 さらにいく぀かの理由がありたす。

Create React Appの曎新プログラムを受け取りたい

React Appの䜜成チヌムがWebpack 2に切り替えおすでに行っおいたツリヌシェヌキングやその他のクヌルな機胜をサポヌトするこずにしたず想像しおください。 この堎合、すべおのアプリケヌションの構成を曎新するのではなく、react-scriptsのバヌゞョンを曎新するだけで十分です。

たたは、Create React AppチヌムがPlugin System670をリリヌスするずしたす。 私はそのようなシステムを䜿い、自分のプラグむンを䜜成したいです。 しかし、むゞェクトが行われた堎合、䜕も機胜したせん。

package.jsonに倚くの䟝存関係があるずきは気に入らない

おそらくこれは些现なこずですが、コヌドで盎接䜿甚しないpackage.jsonのbabel *、eslint *、およびwebpack *の䟝存関係の束を芋たくありたせん。

远加の構成ず远加のコヌド

私は垞にアプリケヌションの枅朔さを維持しおいたす。 取り出し埌、 スクリプトず構成ディレクトリが䜜成されたす。 そしお、それらずずもに-それぞれに50〜200行のコヌドの玄10個の新しいファむル。 ほずんどの堎合、玄5行のコヌドのみを倉曎するためにむゞェクトが行われたす新しいWebpackロヌダヌを1぀远加したす。

再び25

ほずんどの堎合、アプリケヌション構成Babelプリセット、Webpackロヌダヌ、およびプラグむンは同じであるため、むゞェクトを行っお構成を線集した埌、それらを他のアプリケヌションにコピヌする必芁がありたす。

Reactアプリの䜜成が奜きな理由


これは、React開発者のツヌルです。

Create Reactアプリの開発者は、Reactの開発者です。 私は圌らを信頌しおおり、Reactアプリケヌションを正しく開発し、Create React Appプロゞェクトのフレヌムワヌク内でテクノロゞヌの適切な組み合わせですべおの機胜を実装する方法を知っおいるず確信しおいたす。

アプリケヌション構造に構成たたは䜙分なファむルはありたせん

私はアプリケヌションの順序が奜きなので、webpack.configが欠萜しおいるこずは間違いなく奜きです。package.jsonには* rcファむルず䟝存関係のヒヌプはありたせん。

スタック党䜓が1行で曎新されたす。



開発スタックは固定されおおり、安定しおいたす。

React Appを䜜成するず、 ステヌゞ3の機胜のみがリリヌスされたすリリヌス候補。 ドラフトセクションの新機胜 do-expressionsやnull-propagationなどをいじるこずが面癜い堎合がありたす 。 盎亀クラスの提案も芋るこずができたすが、実皌働環境で䜿甚するこずはたったく良い考えではありたせん。

ただし、ドラフトず提案の機胜を匕き続き䜿甚する堎合、結果は次のように説明できたす。



このツヌルの機胜は急速に拡倧しおいたす。

このツヌルの機胜の数は急速に増えるず確信しおいたす。 コミュニティはすでにかなり倧きく、倚くの興味深いアむデアや提案が寄せられおいたす。 それらのいく぀かを次に瀺したす。


䞀郚のスレッドは閉じられおいるか、すでにリリヌスされおいたす。 しかし、䞀番䞋の行は倚くのアむデアがあるずいうこずです。 Reactアプリの䜜成甚のサヌドパヌティ補ツヌルであるCRA generateScaffold a React componentたたはCRAFTなども登堎したした。

Reactアプリの䜜成に関する私の経隓


Create React Appのおかげで、私たちのチヌムはCSSモゞュヌル 、 React Toolbox、および远加のWebpack構成を必芁ずする他のいく぀かのラむブラリを攟棄したした。

ちなみに、 react-toolbox-themrは、React ToolboxずReactアプリの䜜成を簡単に統合できたす...しかし、package.jsonでアプリケヌションテヌマを蚘述するこずは、私にずっおは良い考えではありたせん。

そしお、私はただむゞェクトをしたくありたせん

CSSワヌク

公匏ドキュメントの「 CSSプリプロセッサの远加Sass、Lessなど 」セクションでは、sass以䞋での䜜業の構成方法に぀いお詳しく説明しおいたす。

唯䞀の制限はcssモゞュヌルです。

CSSモゞュヌルの代わりに、 Glamour 、 Aphrodite 、 styled-components 、 Fela 、およびJSSに泚目し始めたした。

Radiumもありたすが、 スタむルを䜿甚しおコンポヌネントをスタむル蚭定するのは奜きではありたせん。

その結果、私たちは独自の、ただたったく新しいアプロヌチであるrockeyを䜿甚したす。

通垞のCSSクラスの代わりに、 テンプレヌトリテラルを䜿甚しお、実際のコンポヌネント名から始たるコンポヌネントスタむルを説明したす。

䞀芋、このアプロヌチはスタむル付きコンポヌネントに䌌おいたすが、実際にはかなり異なりたす。

グロヌバルフォルダヌからダりンロヌドする

芪ディレクトリのモゞュヌルを必芁ずするコヌドを扱うのは非垞に困難です

 const dateUtils = require('../../../utils/date'); 

通垞、Webpackでは、これはresolve.modulesDirectories構成を䜿甚しお解決されたす。 すでに曞いたように、CRAアプリケヌションではWebpackにアクセスできたせんが、2぀の゜リュヌションが可胜です。

公匏なnode_modulesは、 srcディレクトリにnode_modulesを䜜成するこずnode_modules  絶察むンポヌトの公匏゜リュヌションずしおsrc / node_modulesを文曞化1065 。

もう1 NODE_PATH 「矎しい」方法は、 NODE_PATH環境NODE_PATHを䜿甚するこずNODE_PATH 。 詳现に぀いおは、Node.jsの公匏ドキュメント「グロヌバルフォルダヌからの読み蟌み 」を参照しおください。

プラットフォヌム間で環境倉数を蚭定するには、 cross-envを䜿甚するこずをお勧めしたす。

 "scripts": { "start": "cross-env NODE_PATH=src/scripts react-scripts start" } 

.env構成を䜿甚する堎合は、 NODE_PATH倉数を远加するNODE_PATHです。

 NODE_PATH=src/scripts 

環境倉数

Reactアプリの䜜成は、デフォルトで.envをサポヌトしたす dotenvパッケヌゞを䜿甚。 ルヌトフォルダヌに.envを䜜成し、アプリケヌションを実行するだけです。 REACT_APP_プレフィックスを各倉数に远加するこずを忘れないでください。 詳现に぀いおは、セクション「 カスタム環境倉数の 远加」および「.envでの開発環境倉数の远加 」の公匏ドキュメントを参照しおください。

耇数の.env構成のサポヌト

環境のタむプdev / test / prodごずに蚭定を分けるず䟿利な堎合がありたす。 たずえば、 .env.developmentは次のずおりです。

 REACT_APP_GOOGLE_CLIENT_ID = XXX-YYY-ZZZ.apps.googleusercontent.com REACT_APP_API_PROTOCOL = http: REACT_APP_API_HOST = localhost:3000 NODE_PATH = src/scripts PORT = 9001 

そしお、ここで.env.production 

 REACT_APP_GOOGLE_CLIENT_ID = ZZZ-YYY-XXX.apps.googleusercontent.com REACT_APP_API_PROTOCOL = https: REACT_APP_API_HOST = api.my-applicaton.com NODE_PATH = src/scripts 

これは、 dotenvをむンストヌルし、 npm scriptsを曎新するこずで実行できたす。

 "scripts": { "start": "node -r dotenv/config ./node_modules/.bin/react-scripts start dotenv_config_path=.env.development", "build": "node -r dotenv/config ./node_modules/.bin/react-scripts build dotenv_config_path=.env.production" } 

しかし、ほずんどの堎合、私のプルリク゚スト-異なる環境蚭定1343のサポヌトはリリヌスに含たれたす。

どの.env * -configsを䜿甚できたすか


構成の優先順䜍構成ファむルが存圚しない堎合、ステップはスキップされたす


開発サヌバヌのポヌトを倉曎する

たずえば、数幎前にロヌカルホストのポヌト9001〜9005で蚭定されたGoogle Authを䜿甚しおいるため、ポヌト3000でアプリケヌションを実行できたせん。 もちろん、Google Authの蚭定を倉曎できたすが、これらのポヌトを䜿甚する方が䞀般的です。

cross-envを䜿甚しおPORT環境倉数を远加したす。

 "scripts": { "start": "cross-env PORT=9001 react-scripts start" } 

たたは.env config

 PORT=9001 

远加の構成

環境倉数を䜿甚しお可胜な蚭定のリストは次のずおりです。
可倉開発生産䜿甚法
ブロサヌ+-React Appの䜜成ではデフォルトのブラりザヌが開きたすが、特定のブラりザヌを蚭定するか、noneに蚭定しおこの機胜を無効にするこずができたす。 たた、devサヌバヌが起動するたびに実行されるNode.JSスクリプトを指すこずもできたす。
ホスト+-デフォルトはlocalhostです。
枯+-デフォルトは3000です。ビゞヌ状態の堎合、Creat Reactアプリは、次に䜿甚可胜なポヌトでアプリケヌションを実行するように求めたす。 たたは、特定のポヌトを指定できたす。
Https+-trueに蚭定するず、ロヌカルdevサヌバヌがhttpsモヌドで起動されたす。
PUBLIC_URL-+通垞、Create React Appは、アプリケヌションがWebサヌバヌのルヌトにあるこず、たたはpackage.jsonhomepageでパスが定矩されおいるこずを想定しおいたす。 すべおのアセットのリンクをオヌバヌラむドできたす。 これは、CDNを䜿甚しおアプリケヌションをホストしおいる堎合に䟿利です。
Ci++trueに蚭定されおいる堎合、Create React Appは譊告を゚ラヌずしお凊理したす。 -watchパラメヌタヌなしでテストを実行したす。

Webpack構成の線集プラグむンの远加ず゚ントリポむントの倉曎

䟋ずしお、必芁なずきに2぀の状況を瀺したす。

  1. Webpack Offline Pluginを远加したす。
  2. アプリケヌションの1぀のコンポヌネントのみでビルドしたす。

䞀芋、むゞェクトなしでは䜕も機胜しないようです。 しかし、方法がありたす。 公匏にはサポヌトされおおらず、新しいバヌゞョンでは動䜜しない可胜性があるため、䜿甚するこずはお勧めしたせん。

npm-scripts build:custom远加npm-scripts build:custom 

 "scripts": { "build:custom": "node scripts/customBuild.js" } 

次に、 scripts/customBuild.js䜜成したす。

 const webpack = require('react-scripts/node_modules/webpack'); const craWebpackConfig = require('react-scripts/config/webpack.config.prod'); const OfflinePlugin = require('offline-plugin'); const config = { ...craWebpackConfig, plugins: [ ...craWebpackConfig.plugins, new OfflinePlugin() ] }; webpack(config).run(function(err, stats) { if (err !== null) { console.log('done'); } else { console.log(err); } }); 

この堎合、Webpack構成のみが展開され、react-scriptsビルドは展開されたせん。 矎しいログ、珟圚ず以前のビルドのサむズの比范、その他の機胜はありたせん。

非暙準のロヌダヌyaml、markdown、dsvロヌダヌなどず远加のプラグむンを䜿甚するず、アプリケヌションがさらに耇雑になりたす。 たた、堎合によっおは、新しいWebpackリリヌスにアップグレヌドするこずさえできたせん。

だからこそ、私はWebpackの通垞のcss-loaderさえ奜きではないのです。 私は垞にjsたたはjsonモゞュヌルのみを接続しようずしたす。 CSSファむルは、webpack入力フィヌルドの構成に適しおいたす。 require関数を䜿甚しおそれらを接続しないようにしたす。 これにより、アプリケヌションは可胜な限り電流コレクタヌに䟝存したす。

Babelのプリセットずプラグむン

Create Reactアプリは、ただbabel config拡匵機胜をサポヌトしおいたせん。 したがっお、 デコレヌタもサポヌトされおいたせん 。

Pull Requestカスタムbabel構成のサポヌトの远加1357を行いたした 。 しかし、すでに閉じられおおり、React Appの䜜成チヌムに完党に同意したす。倚くの蚭定でアプリケヌションを詰たらせないでください。

デコレヌタヌは物事を簡単にするだけでなく、デコレヌタヌなしでも実行できたす。デコレヌタヌはステヌゞ3に入るずすぐにサポヌトされたす。



反応スクリプト

ほずんど誰も知らない機胜。 公匏のgithubスレッドでもう少し情報を芋぀けるこずができたす-リゞェクトスクリプトのフォヌクを排出す​​る代わりずしお維持するドキュメント。 682

Reactスクリプト -䜿甚されるすべおのスクリプト開始/テスト/ビルドおよび䜿甚されるすべおのツヌルの構成が実装されおいるパッケヌゞ。

぀たり、フォヌクしお珟圚のバヌゞョンず同期し、必芁な機胜を远加できたす。

 create-react-app my-app --scripts-version my-super-react-scripts, 

my-super-react-scriptsは、react-scriptsのバヌゞョンです。

たずえば、デコレヌタ、babel-preset-stage-0、LESS / SASS、CSSモゞュヌルをサポヌトするcustom-react-scriptがありたす詳现に぀いおは、「 むゞェクトせずにcreate-react-appを構成する 」を参照。

玠晎らしいCreate Reactアプリ

Awesome Create React App-興味深い玠材の遞択、期埅される機胜、FAQ。 既存の反応スクリプトバヌゞョンのリストも提䟛されたす。

バヌゞョン0.10.0で期埅される機胜のリスト

ランタむム゚ラヌオヌバヌレむ1101

未凊理の䟋倖がある堎合、゚ラヌダむアログが衚瀺されたす。これは、以前に远加された機胜-構文゚ラヌオヌバヌレむに非垞に䌌おいたす。 ゚ラヌメッセヌゞ、コヌルスタック、゚ラヌが発生したコヌド行が衚瀺されたす。 Escapeをクリックするず、ダむアログを非衚瀺にできたす。 以前のように、゚ラヌはコン゜ヌルに耇補されたす。



webpack v21291ぞのアップグレヌド

これで、Create Reactアプリのすべおのナヌザヌは、Webpack 1からWebpack 2ぞの移行ガむドを読む代わりに、react-scripts twitter.com / ... status / 819634786734112768 のバヌゞョンを曎新するだけで枈みたす。 webpack 2の新機胜たたは新機胜 。

動的むンポヌトのサポヌト1538

モゞュヌルの非同期ロヌドのための非垞にクヌルな機胜。 以前は、このためにrequire.ensureが䜿甚されおいたした。

 import('./path/to/module).then(module => { // module.default }); 

コミット時のきれいな自動フォヌマット甚にリントステヌゞ+ハスキヌを远加1759

むンデックス内のファむルのeslintを自動的に起動し、各コミットの前にきれいなファむルを䜿甚しおフォヌマットしたす。

これたで、Create React App自䜓の内郚機胜ずしおのみ実装されおいたしたが、生成されたアプリケヌションに远加されるこずを本圓に望んでいたす。



そしお、他の倚くのクヌルな機胜


終わり

「構成の欠劂」を機胜ずしお扱う必芁があり、決しお問題ずしお扱う必芁はありたせん。 存圚する機胜は、どのアプリケヌションにも十分です。

むゞェクトたたは独立した構成を行うこずにより、デコレヌタたたはその他の小さなものを远加するために、珟圚のCRA機胜および新しいリリヌスの機胜をすべお犠牲にしたす。

Create React Appのフレヌムワヌク内でWebpack、Babel、たたはその他のツヌルを構成するず、Create React Appがより脆匱になりたす。 たた、Create React Appチヌムは、ツヌルの完璧な操䜜ず安定性を保蚌できたせんでした。 たた、Create React Appに関連しないCreate React Appの問題の発生をトリガヌしたす。

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


All Articles