ホームページ >ウェブフロントエンド >jsチュートリアル >10 node.jsベストプラクティス:ノードの達人からの啓発
<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
フロントエンドのために開発する際には、コードを再構築するために2つ以上の時計プロセスを実行する必要があります。たとえば、1つはWebパック用、もう1つはNodemon用です。最初のコマンドがプロンプトをリリースしないため、&&でこれを行うことができます。ただし、複数のプロセスを生成して同時に実行できる、同時に呼ばれる便利なモジュールがあります。 また、競合を回避するために、
webpack、nodemon、gulp、mochaなどの開発コマンドラインツールをインストールします。たとえば、./node_modules/.bin/mochaを指すか、この行をbash/zshプロファイル(path!)に追加できます。env varsを使用します プロジェクトの初期段階でも環境変数を利用して、機密情報の漏れがないことを確認し、最初からコードを適切に構築するためだけに使用します。さらに、一部のライブラリとフレームワーク(Expressが確かに行うことは知っています)は、node_envのような情報を引き込み、動作を変更します。それを生産に設定します。 Mongo_uriとapi_keyの値も設定します。シェルファイル(start.shなど)を作成し、.gitignoreに追加できます。
<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>nodemonには、env varsを配置できる構成ファイルもあります(例):
イベントループを理解してください
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>強力で巧妙なイベントループは、入力タスクと出力タスクが完了するのを待っているすべての時間を無駄にすることで、ノードを非常に高速で素晴らしいものにするものです。したがって、ノードはI/Oバウンドシステムの最適化に優れています
CPU集約型(例:計算、パスワードのハッシュ、または圧縮)を実行する必要がある場合は、それらのCPUタスクの新しいプロセスを生成することに加えて、Setimmediateでタスクの延期を調査することをお勧めします()またはsetimeout() - コールバックのコードは、次のイベントループサイクルで継続します。 NextTick()は、名前に反して同じサイクルで動作します。 argh!
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>イベントループに取り組んだバートベルダーの図です。彼は、イベントループがどのように機能するかを明確に知っています!
機能的継承を使用
javaScriptは、オブジェクトが他のオブジェクトから継承されるときであるプロトタイプ継承をサポートします。クラスオペレーターもES6を使用して言語に追加されました。ただし、機能的継承と比較して明白に複雑です。ほとんどのノードの達人は、後者のシンプルさを好みます。単純な機能工場パターンによって実装されており、プロトタイプ、新品またはこれを使用する必要はありません。機能的継承では、各オブジェクトが独自のメソッドのコピーを使用するため、プロトタイプを更新するとき(すべてのインスタンスも変更します)。
Express、Mocha、Connect、Superagent、および他の数十のノードモジュールの背後にある多作な天才であるTJ Holowaychukのコードを検討してください。 Expressは機能的継承を使用します(完全なソースコード):<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
客観的であるために、コアノードモジュールはプロトタイプ継承を非常に使用します。そのパターンに従う場合は、それがどのように機能するかを確認してください。 JavaScript継承パターンの詳細については、
をご覧くださいこれは明らかです。良い名前はドキュメントとして機能します。どちらが好きですか?
<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>
app.use()のみを見ると、デクスターが何をしているのかわかりません。より意味のある別の名前はどうですか:
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>
同じ方法で、ファイル名は内部のコードの目的を正しく反映する必要があります。プラットフォームにバンドルされたすべてのコアモジュールを備えたノード(GitHubリンク)のLIBフォルダーをご覧ください。ファイル/モジュールの明確な命名が表示されます(たとえすべてに精通していない場合でもコアモジュール):
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>
内部モジュールには、コードのメソッドと変数と同様に、アンダースコア(_debugger.js、_http_agent.js、_http_client.js)がマークされています。これは、これが内部インターフェイスであることを開発者に警告するのに役立ち、あなたがそれを使用している場合、あなたは自分で存在します - それがリファクタリングされるか、削除されたかどうか不平を言うことはありません。
javascriptすることを許可することを可能にする)だけでなく、まったく新しい言語ではなく、まさにそれを行うsweet.jsを検討してください。コードを生成するコードを記述する。
JavaScript以外のルートを使用する場合は、一部の開発者が適切に構築するのに十分な言語を十分に理解できない可能性があるため、コンパイルされたコードを含めてください。たとえば、VSコードは最大のタイプスクリプトプロジェクトの1つであり、おそらくAngular 2の後に、CodeはTypeScriptを使用して、タイプを備えたノードのコアモジュールをパッチすることです。 VSCODE/SRC/VS/BASE/NODE/VS CODE REPO(LINK)のbase/node/では、Crypto、Processなどの馴染みのあるモジュール名を見ることができますが、TS拡張機能を備えています。リポジトリには他のTSファイルがあります。ただし、ネイティブJavaScriptコードを使用したvscode/buildも含まれています
Expressは、非常に成熟したフレームワークです。それは、他の多くのモジュールがその動作を構成できるようにすることから来ています。したがって、最も使用されているミドルウェアを知る必要があり、それをどのように使用するかを知る必要があります。それで、なぜ私のエクスプレスチートシートをつかみませんか。メインミドルウェアモジュールがそこにリストされています。たとえば、NPM I圧縮-Sは、応答をデフレーすることにより、ダウンロード速度を低下させます。 logger( 'tiny')またはlogger( 'common')は、それぞれ(dev)以上(prod)ログを提供します。 スケールアップ ノードは非ブロッキングI/OのためにASYNCに最適であり、スレッドが1つしかないため、この非同期のコーディング方法をシンプルに保ちます。これは、コードの最初の行でさえ、早い段階でスケーリングを開始する機会です。あまり多くの問題なく垂直にスケーリングできるコアクラスターモジュールがあります。ただし、さらに良い方法は、PM2やStrongloopのクラスター制御などのツールを使用することです。 たとえば、
これはPM2:その後、同じサーバーの4つのインスタンスを開始できます。
Dockerの場合、PM2バージョン2にはPM2ドッカーがあります。したがって、あなたのdockerfileは次のようになります:
<span>"scripts": { </span> <span>"preinstall": "node prepare.js", </span> <span>"postintall": "node clean.js", </span> <span>"build": "webpack", </span> <span>"postbuild": "node index.js", </span> <span>"postversion": "npm publish" </span><span>} </span>
公式の高山Linux PM2画像はDocker Hubにあります。
キャッシュリクエスト<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>
これは、ノードインスタンスからより多くのジュースを取り出すことができるDevOpsのベストプラクティスです(PM2以下で複数のジュースを取得します。上記を参照)。道は、ノードサーバーにリクエストの作成、データの処理、ビジネスロジックの実行など、Apache httpdやnginxなどの別のWebサーバーにトラフィックを静的ファイルにオフロードするなどのアプリを実行できるようにすることです。繰り返しになりますが、おそらくセットアップにDockerを使用する必要があります:
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>
Docker Composeを使用して、複数のコンテナ(Nginx、ノード、Redis、Mongodb)を互いに動作させるのが好きです。たとえば、
この時代とオープンソースソフトウェアの時代には、開いている信頼できるテストコードから学習しない言い訳はありません。入るために内側のサークルにいる必要はありません。学習は止まることはなく、すぐに私たちが経験する失敗と成功に基づいてさまざまなベストプラクティスがあると確信しています。それらは保証されています。
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>
最後に、私はソフトウェアが世界をどのように食べているか、JavaScriptがどのようにソフトウェアを食べているかについて書きたかったのですが、毎年標準リリース、たくさんのNPMモジュール、ツール、会議などの素晴らしいことがありますが、代わりに終了します。注意して。
exports <span>= module.exports = createApplication; </span><span>// ... </span><span>function createApplication() { </span> <span>var app = function(req<span>, res, next</span>) { </span> app<span>.handle(req, res, next); </span> <span>}; </span> <span>mixin(app, EventEmitter.prototype, false); </span> <span>mixin(app, proto, false); </span> app<span>.request = { __proto__: req, app: app }; </span> app<span>.response = { __proto__: res, app: app }; </span> app<span>.init(); </span> <span>return app; </span><span>} </span>次の新しいフレームワークや言語をどのように追いかけるかがわかります。それは光沢のあるオブジェクト症候群です。彼らは毎週新しいライブラリと毎月新しいフレームワークを学びます。彼らは、Twitter、Reddit、Hacker News、JS Weeklyを強制的にチェックします。彼らは、JavaScriptの世界で圧倒的なレベルの活動を使用して先延ばしにします。彼らは空の公共のgithubの歴史を持っています。
新しいことを学ぶのは良いことですが、実際に物を構築するために混同しないでください。 重要なのは、あなたの給料を支払うものは、実際に物を構築することです。エンジニアリングを停止します。次のFacebookを構築していません。約束と発電機とAsync待ち声は私にとって論争です。なぜなら、誰かがディスカッションでスレッドに返信する頃には、私はすでにコールバックを書いたからです(そして、coffeescriptを使用して、プレーンES5/6/7よりも2倍速いです! )。
最終的なベストプラクティスは、ベストプラクティスを使用することであり、最高の最高のプラクティスは基礎を習得することです。ソースコードを読んで、コードで新しいものを試して、最も重要なことは、自分で大量のコードを書くことです。さて、この時点で、重要なコードを読んで出荷するのをやめてください!
この投稿が十分ではない場合に備えて、ここでは最高のノードプラクティスについてもっと読みます:
node.jsで開発する際に避けるべき一般的な間違いは、イベントループのブロック、エラーを適切に処理するのではなく、コードの品質を実施するためにリンターなどのツールを使用しないことが含まれます。イベントループをブロックすると、他の操作が実行されないようにするため、パフォーマンスの問題につながる可能性があります。エラーを適切に処理しないとアプリケーションのクラッシュにつながる可能性がありますが、リンサーを使用しないと、コードの品質と潜在的なバグが一貫性のない場合があります。 node.jsアプリケーションの展開には、いくつかのベストプラクティスが含まれます。これらには、構成に環境変数を使用し、PM2のようなプロセスマネージャーを使用してアプリケーションを管理すること、およびCodeBaseに変更されたときに継続的な統合(CI)システムを使用してアプリケーションを自動的に展開することが含まれます。また、パフォーマンスの問題を特定して対処するためにアプリケーションを監視することも重要です。 node.jsアプリケーションを展開するためのベストプラクティスは何ですか?
以上が10 node.jsベストプラクティス:ノードの達人からの啓発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。