Node.js最佳實踐 -在2017年如何成為一名更好的Node.js開發者
一年前,我發表的 在2016年如何成為一名更好的Node.js開發者 獲得了廣泛的歡迎,因此今年我想延續去年的主題,講講在2017年,如何成為一名更好的Node.js開發者。
在這篇文章中,我們將回顧2017年Node.js的最佳實踐,最熱話題,我們需要關注什么,來提升自身能力。讓我們開始吧!
使用 ES2015
去年,我們也建議大家 使用ES2015 ,和去年相比,今年有很大的改觀。
當時,Node.js v4版本作為長期支持版本,僅支持57% ES2015的語法,經過了一年,Node.js v6版本作為長期支持版本,支持了99% ES2015的語法。
也就是說,如果你正在使用最新的長期支持版本的Node,你不需要添加任何的babel,也可以使用ES2015編輯整個項目。
關于更多的Node.js版本對ES2015支持的細節,我推薦大家去Node.js官網
使用 Promises
promise的概念早在八十年代就被提出,現在已經是大多數現代編程語言中簡化編寫的一部分。
假設如下場景,讀取一個文件,把它轉成JSON并輸出文件名,如果用callback回調函數實現,代碼如下:
fs.readFile('./package.json', 'utf-8', function (err, data) {
if (err) {
return console.log(err)
}
try {
JSON.parse(data)
} catch (ex) {
return console.log(ex)
}
console.log(data.name)
})
我們用Promises實現這個功能,可以提高代碼的可讀性:
fs.readFileAsync('./package.json').then(JSON.parse).then((data) => {
console.log(data.name)
})
.catch((e) => {
console.error('error reading/parsing file', e)
})
當然,現如今使用 fs 模塊并沒有一個返回值為Promise的 readFileAsync API,為了讓上述代碼正常運行,你需要引入一個類似 promisifyAll 的模塊,給它運行的環境。
使用代碼規范
當代碼規范被稱為代碼規范時,就意味著,至少在公司范圍內推行,所以,當你想要改變你的項目時,意味著從0開始,不需要為之前的人的代碼而懊惱。
我們RisingStack使用了我們的代碼規范 JavaScript Standard Style 構建我們的項目。
使用代碼規范,你不需要使用 .eslintrc , .jshintrc , 或 .jscsrc 不需要加載其他文件到項目中。
使用Docker
你可以把Docker鏡像當成部署容器的工具。Docker就是部署軟件運行環境的一個容器,它包含了你軟件運行的大部分的基礎環境:代碼,運行時間,系統工具,系統程序庫,任何你能想到需要安裝的東西。
為什么應該使用 Docker?
-
隔離了運行環境和項目代碼
-
作為一個安全工具,讓你的代碼更加安全
-
輕量的Docker鏡像
-
穩定的部署
-
通過Docker你可以在本地看到你軟件的運行環境
你可以參照網站 official getting started tutorial 完成你的第一個Docker,另外推薦 Kubernetes best practices 作為補充。
監視你的程序
當你的Node進程出現故障時,第一個知道的人應當是開發者,而不是用戶。
一個開源的解決方案 Prometheus 可以幫助你解決進程崩潰的問題。 Prometheus是SoundCloud的一個開源工具箱,監聽并提示進程崩潰問題。 唯一的缺點是你需要手動掛載在自己開發的域下。
如果你在尋找一個開箱即用的方案,可以關注我們開發的 Trace by RisingStack ,也是一個不錯的解決方案。
Trace能為我們做的
-
警告
-
記錄收集項目的CPU數據
-
分布式追蹤,查找錯誤
-
性能監測,
-
保護你的npm包安全
進行后臺日志管理
如果你用HTTP發送請求,只要接受停止,整個消息都會丟失。但是,如果逆選擇一個持久的傳輸層,像一個消息隊列一樣傳輸消息,你就不會有這個困擾。
如果接收服務停止,消息傳輸還會繼續,將會在稍后發出。如果服務沒有掛掉,它會有一個提示, 服務器將會重試,因此沒有數據會丟失。
一個例子: 假如你發送了幾千封郵件,在每一封里,你都會寫一些基礎信息,像郵件地址,姓名,簽名,這時后臺就好像工人一樣,整理出一樣地址的幾百封,一起發到同一個地址。
這樣的好處是,你可以隨時查看每一封的狀態,沒有郵件會被寄丟。如果你發現幾百封郵件同時丟了,你可以進行后期操作,讓他們使用同一隊列。
你可以使用借鑒如下日志管理工具:
使用最新的穩定的Node.js版本
為了最好的開發體驗,我們最推薦的版本是最新版本和最新穩定版本,在本文中,我們更推薦最新長期穩定版本。就是寫這篇文章時的最新版本 6.9.2 。
為了更輕松的切換Node版本, 你可以使用 nvm 。 你安裝一次, 輸入這兩個命令:
nvm install 6.9.2
nvm use 6.9.2
使用語義化的版本
在幾個月前我們進行了一次關于 Node.js Developer Survey 的分享, 我們呼吁并幫助大家認識并使用語義化的Node版本。
不幸的是,我發現只有71%的調查對象使用語義化的版本,在構建他們的項目。 這個比例應當更高,我們的觀點是,每個項目都應當使用版本控制。 為什么這么說,當我們更新包的時候,如果沒有版本控制,很容易把整個項目搞崩潰。
對你的項目和模塊做版本控制是很關鍵的,你的用戶必須知道,什么時候發布了新版本,他們需要做什么,來獲取新版本。
這就是為什么圖片中展示的,為什么這么多人使用語義化的版本控制,你需要在版本控制中包含如下信息 重點,監聽,補丁
-
重點當有不兼容的API更新時,需要通過版本控制兼容
-
監聽在不終止服務的情況下增加新的API
-
補丁向下兼容,BUG修復
npm也用了版本管理來管理你項目的依賴,因此,當你發布模塊的時候,一定要確認npm包是否有相應的更新。換個說法,如果不看,你也許會把其他系統弄崩潰。
維護應用的安全性
在2017年,保護你的用戶信息安全將會是你構建項目的著重點。僅在2016年,就有 數百萬用戶被賬戶入侵 ,出現這個現象就是因為安全措施不到位。
作為Node.js安全的初學者, 你可以讀我們的博客 Node.js Security Checklist , 包含如下觀點:
-
安全的 HTTP Header,
-
強制保護,
-
Session管理,
-
處理依賴關系,
-
數據管理
當你理解了這些基礎概念, 你可以在 Surviving Web Security with Node.js !留下你的觀點
學習Serverless
Serverless是AWS Lambda提出的一個理念。從此以后,這種理念流行起來, 并且有了開放的討論社區。
明年, serverless 將成為一個關于構建項目的專門的方向。如果你想更上一層樓,你需要從現在開始學習。
一個最流行的解決方案就是 Serverless Framework , 這是由 AWS Lambda部署的一個方案。
參加研討會和見面會
參加研討會和見面會是一個學習新趨勢,開發技巧和最佳實踐的好機會。當然也可以認識更多的人。
作為開始的第一步,我建議你參加并在 one of these events 上演講。
做一個公開的演講很難,吸引到每一個人的注意力更是難上加難,而且這不是一個好的想法。我推薦去 speaking.io 查看演講的一些小技巧。
在2017年成為一名更好的Node.js開發者
2017年作為- Node.js發力的一年,我們希望大家從Node.js開發中收獲更多
我們啟動了一個新的項目叫做掌握Node.js,希望從這些方面加深大家對Node.js的理解
-
Node.js異步編程
-
創建Express服務器
-
創建Node數據庫
-
使用Node構建結構化,可擴展的APP
來自:http://www.w3ctech.com/topic/1970