<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>
>通常是為前端開發時,您想運行兩個或多個手錶過程以重新構建代碼。例如,一個用於WebPack,另一個用於Nodemon。您可以使用&&執行此操作,因為第一個命令不會發布提示。但是,有一個名為同時的方便的模塊,可以同時產生多個過程並同時運行它們。
另外,安裝Dev命令行工具,例如WebPack,Nodemon,Gulp,Mocha等。您可以指向./node_modules/.bin/mocha,或將此行添加到您的bash/zsh配置文件(路徑!):> >使用env vars
即使在項目的早期階段,也要利用環境變量,以確保敏感信息沒有洩漏,並從一開始就正確構建代碼。此外,某些庫和框架(我知道Express肯定會做到這一點)將吸引諸如Node_env之類的信息以修改其行為。將其設置為生產。還設置您的mongo_uri和api_key值。您可以創建一個shell文件(例如start.sh),然後將其添加到.gitignore:<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>
強大而聰明的事件循環是使節點一直使用的所有時間使節點變得如此快,出色的原因,而這本來可以浪費的,等待輸入和輸出任務完成。因此,節點非常擅長優化I/O結合系統。
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>
>如果您需要執行CPU密集型(例如,計算,密碼的哈希或壓縮),則除了為這些CPU任務傳遞新的過程外,您可能還需要探索任務的推遲,並使用SETIMMIDIATIE進行遞延。 ()或settimeout() - 他們的回調中的代碼將繼續在下一個事件循環週期中繼續。 NextTick()在相同的周期上工作,與名稱相反。 argh!
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>>這是伯特·貝爾德(Bert Belder)的圖表,他在活動循環中工作。他清楚地知道事件循環是如何工作的!
使用功能繼承
> JavaScript支持原型繼承,即對像從其他對象繼承時。班級運營商還使用ES6添加了該語言。但是,與功能性繼承相比,它非常複雜。大多數節點專家都喜歡後者的簡單性。它是由簡單功能工廠模式實現的,並且不需要使用新的或新的原型。當您更新原型時,沒有隱含的效果(導致所有實例也更改),因為在功能繼承中,每個對像都使用其自己的方法副本。
考慮TJ Holowaychuk的代碼,TJ Holowaychuk是Express,Mocha,Connect,Superegent和數十個其他節點模塊背後的多產天才。 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>>我不知道Dexter僅查看app.use()時在做什麼。如何有意義的名稱:
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>以相同的方式,文件名必須正確反映內部代碼的目的。如果您查看Node(github鏈接)的LIB文件夾,該文件夾與平台捆綁在一起的所有核心模塊,那麼您將看到文件/模塊的清晰命名(即使您對所有內容都不熟悉
> all 核心模塊):
<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代碼是最大的打字稿項目之一,也許是在Angular 2之後,並且代碼使用TypeScript使用類型進行補丁節點的核心模塊。在VS代碼回購的VSCODE/SRC/VS/BASE/NODE/NODE/NODE/NODE/NODE(鏈接)中,您可以看到熟悉的模塊名稱,例如加密,流程等,但使用TS擴展名。存儲庫中還有其他TS文件。但是,它們還包括帶有本機JavaScript代碼的VSCODE/build。。那麼,為什麼不抓住我的快遞備忘單。我在那裡列出了主要的中間件模塊。例如,NPM I壓縮-s將通過放氣響應來降低下載速度。 logger('tiny')或logger('common')分別提供較少的(dev)或更多(prod)日誌。 > 向上
由於其非阻滯I/O,因此>
然後,您可以啟動同一服務器的四個實例:
<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>對於Docker,PM2版本2具有PM2-Docker。因此,您的Dockerfile看起來可以這樣:
<span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span> </span>>官方Alpine Linux PM2圖像在Docker Hub中。
<span>NODE_ENV=production MONGO_URL=mongo://localhost:27017/accounts API_KEY=lolz nodemon index.js </span>>這是一個最佳練習,可以使您從節點實例中獲得更多的果汁(您使用PM2或類似的果汁,請參見上文)。要走的方法是讓節點服務器執行應用程序工作,例如提出請求,處理數據並執行業務邏輯並將流量從靜態文件中卸載到另一個Web服務器,例如Apache HTTPD或Nginx。同樣,您可能應該使用Docker進行設置:
摘要
<span>{ </span> <span>"env": { </span> <span>"NODE_ENV": "production", </span> <span>"MONGO_URL": "mongo://localhost:27017/accounts" </span> <span>} </span><span>} </span>
>在當今的開源軟件時代,沒有任何藉口不從公開的受信任和測試的代碼中學習。您無需進入內心圈子就可以進入。學習永遠不會停止,我敢肯定,我們很快就會根據我們將經歷的失敗和成功獲得不同的最佳實踐。保證它們是。
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>>最後,我想寫有關軟件如何飲食世界以及JavaScript如何吃軟件的信息……有很多很棒的事情,例如年度標準版本,很多NPM模塊,工具和會議……但是相反,我將完成有一個謹慎的態度。
學習新事物是好的,但不要因為實際構建東西而混淆。 重要的是,您的薪水實際上是在建立東西。停止工程。您不是在構建下一個Facebook。 Promises vs. Generator vs. Async等待著我對我來說是一個疑問,因為當有人回复討論中的線程時,我已經寫了我的回調(並使用CoffeeScript的速度比普通的ES5/6/7快2倍! )。
>最終的最佳實踐是使用最佳實踐,最好的方法是掌握基本面。閱讀源代碼,嘗試代碼新事物,最重要的是自己編寫大量代碼。現在,在這一點上,停止閱讀並進行重要的船舶代碼!
,以防萬一這篇文章還不夠,這裡有更多關於最佳節點實踐的閱讀:https://blog.risingstack.com/nodejs-at-scale-npm-best-practices
>
>測試Node.js應用程序的一些最佳實踐是什麼? Node.js開發,並且有幾種最佳實踐值得關注。其中包括編寫單元測試以測試應用程序的各個組件,集成測試以測試這些組件如何交互,以及端到端測試以整體測試您的應用程序。每當對您的代碼庫進行更改時,使用連續集成(CI)系統也很重要。 NODE.JS通常使用NPM,NPM,NPM,node.js的默認軟件包管理器完成。重要的是要在軟件包中指定依賴項的確切版本。您還應該定期更新依賴項,以從錯誤修復和安全補丁中受益。>
>我如何確保Node.js?>如何縮放我的node.js應用程序?可以通過多種方式實現Node.js應用程序。一種常見的方法是使用群集模塊創建共享服務器端口的子進程,從而使您的應用程序同時處理更多請求。您還可以使用負載平衡來通過多個服務器分發傳入的網絡流量,以及根據您的需求,水平縮放(添加更多機器)或垂直縮放(向單個機器添加更多資源)。
以上是10個Node.js的最佳實踐:節點大師的啟蒙的詳細內容。更多資訊請關注PHP中文網其他相關文章!