Node.js最佳實踐--在2017如何成為一個更好的開發(fā)者

一年前箫爷,我們寫了一篇文章How to Become a Better Node.js Developer in 2016 软啼,這篇文章成功地獲取了不錯的反響窖铡,所以我想現(xiàn)在是時候回顧這個主題為2017年做準備了溉委。

2017年最好的Node.js實踐

使用ES2015

去年我們建議了你使用ES2015点待,當前現(xiàn)在的情況已經(jīng)大有不同了

回到那個時候奏路,Node.js v4是當時的穩(wěn)定版本(LTS)畴椰,支持了ES2015中57%的功能。一年過去了鸽粉,現(xiàn)在Node v6已經(jīng)增長到支持ES2015中99%的功能了斜脂。

如果你現(xiàn)在在使用最新的LTS Node.js版本,你甚至可以不再需要babel就可以使用所有ES2015的特性触机。但是即使如此帚戳,在瀏覽器端你可能還是需要babel。

如果你需要關于Node.js版本對于ES2015支持情況的更多的信息儡首,我推薦你可以查詢node.green

使用Promises

在80年代第一次提出Promises的概念∑危現(xiàn)在多數(shù)現(xiàn)代編程語言已經(jīng)支持這一特性了,使我們的編碼變得更加簡單蔬胯。

想象一個如下的功能对供,它需要讀取一個文件,然后解析它氛濒,然后打印出其中的name字段产场。如果使用回調(diào),它可能是下面這個樣子的:

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)
})

當前泼橘,現(xiàn)在的fs的并沒有一個返回一個Promise的readFileAsyncapi涝动。為了做到這個迈勋,我們使用可以一個類似promisifyAll的模塊炬灭。

使用標準的JavaScript格式

當我們談到代碼風格的時候,一個公司有統(tǒng)一的代碼風格是至關重要的靡菇。只有這樣重归,當你需要改變你的項目的時候,你才可以高效的從零開始厦凤,而不用擔心基礎的架構不一樣鼻吮。

在RisingStack,我們在所有的項目中都使用了JavaScript Standard Style较鼓。

使用 Standard后椎木,在你安裝之后就可以直接使用违柏,你不需要再做其他的事情,也不需要管理.eslintrc, .jshintrc, 或者 .jscsrc文件香椎。具體的Standard的規(guī)則可以查看Standard rules漱竖。

使用docker---容器將在2017年被大量使用在生成環(huán)境

你可以把docker鏡像當做部署的工具。docker容器可以將一個軟件打包在一個完整的文件系統(tǒng)中畜伐,這個容器可以包含你在服務器上需要的一切馍惹,例如代碼,運行環(huán)境玛界,系統(tǒng)工具万矾,系統(tǒng)程序庫。

但是為什么我們需要開始使用容器呢?

  • 容器可以使你的應用運行在一個隔離的環(huán)境中
  • 作為一個安全工具慎框,可以使你的代碼更加的安全
  • 輕量級的docker鏡像
  • 使得你的部署變得穩(wěn)定
  • 你可以在本地運行模擬線上的運行環(huán)境

你可以從official getting started tutorial開始學習docker良狈。另外也推薦Kubernetes best practices

監(jiān)控你的項目

當你的應用發(fā)生錯誤的時候,第一個知道的人不應該是用戶而應該是開發(fā)者鲤脏。

最新的一個開源解決方案Prometheus可以幫助你實現(xiàn)項目的監(jiān)控们颜。Prometheus是一個基于SoundCloud的開源工具箱,它可以監(jiān)控你的項目并報警猎醇。Prometheus唯一的缺點是你需要設置一些配置并且需要需要自己管理窥突。

如果你在尋找一個開箱即用的解決方案,你也可以使用我們自己開發(fā)的Trace by RisingStack

Trace可以幫助你做到以下的事情

  • 報警
  • 生產(chǎn)環(huán)境下的內(nèi)存和cpu分析
  • 分布式追蹤和錯誤尋找
  • 性能監(jiān)控
  • 保護你的npm包的安全

在后臺進程中使用消息服務

如果你使用http請求發(fā)送消息硫嘶,當你的接收服務器宕機了阻问,你所有的消息都會丟失。如果你的傳輸層支持持久化沦疾,類似使用消息隊列來發(fā)送消息称近,你就不會有這個問題。

你的接收服務器器宕機了哮塞,消息將會被保存下來刨秆,在服務重啟后會繼續(xù)發(fā)送,如果你的服務器未宕機但是發(fā)送了錯誤忆畅,消息會被重新發(fā)送一次衡未,這樣可以保證你的數(shù)據(jù)不會丟失。

舉個例子:你需要發(fā)送數(shù)千份郵件家凯,在這個場景下缓醋,你只需要獲取到一些類似郵件地址和用戶的姓名等基礎信息,后臺就可以很輕松地將這些信息和郵件信息整合后發(fā)送出去绊诲。

這種方式最大的好處是送粱,你可以你需要的時候橫向擴展你的服務,而不會有郵件被丟失掂之。如果你需要發(fā)送數(shù)百萬的郵件抗俄,你可以用相同的方式來增加你的服務脆丁。

對于消息隊列的選擇有很多

使用最新的LTS版本的Node.js

為了平衡穩(wěn)定性和新特性,我推薦你使用最新的LTS版本的Node.js动雹。當我寫這篇文章的時候偎快,最新的LTS版本是6.9.2。

你可以使用nvm來切換你的node版本洽胶,你只需要兩個指令就可管理和切換你的node版本

nvm install 6.9.2 
nvm use 6.9.2

使用語義化的版本管理

幾個月前晒夹,我們進行了一個Node.js開發(fā)者調(diào)查,我們從中獲取了開發(fā)者對于使用語義化版本的使用情況姊氓。

不幸的是丐怯,我們發(fā)現(xiàn)調(diào)查者只有71%的人在他們提交和使用模塊時使用語義化的版本管理。我們認為這個數(shù)字應該要更高 - 每一個都應該使用語義版本!翔横,因為不根據(jù)semver規(guī)則來提交package读跷,會很容易摧毀你的Node.js應用。

通過版本號來管你的項目或者模塊是至關重要的禾唁。你的用戶應該要知道一個模塊是否更新了效览,在使用新版本前他們要做什么。

這就是語義版本控制的來歷荡短。一個版本號應該要有主版本號丐枉、副版本號、補丁版本號掘托,更新不同位置的版本號代表不同的意思:

  • 主版本號:表示更新會有不兼容的API
  • 副版本號:表示更新會有新的功能(不破壞現(xiàn)有的api)
  • 補丁版本號:表示更新是模塊做了向后兼容的bug修復

npm是根據(jù)semver規(guī)則來安裝依賴的瘦锹,因此當你發(fā)布一個模塊之前,請確認是否遵循了semver規(guī)則闪盔,否則你會破壞了其他使用了你的依賴的應用弯院。

保證你的應用安全

保證你的用戶數(shù)據(jù)的安全將是你2017年的頭等大事。僅在2016年一年泪掀,因為缺少一些安全的措施就有數(shù)百萬的用戶賬戶被泄漏听绳。

你可以通過閱讀我們的博客Node.js Security Checklist來入門Node.js的安全,博客里包含了以下的話題:

  • 安全的HTTP Headers
  • 強制保護
  • Session管理
  • 不安全的依賴
  • 數(shù)據(jù)驗證

當你掌握了這些基礎异赫,你可以來觀看我關于Node的互動討論Surviving Web Security with Node.js

學習Serverless

Serverless started with the introduction of AWS Lambda. Since then it is growing fast, with a blooming open-source community.
In the next years, serverless will become a major factor for building new applications. If you'd like to stay on the edge, you should start learning it today.
One of the most popular solutions is the , which helps in deploying AWS Lambda functions.

Serverless是AWS Lambda第一個提出來的椅挣,之后它發(fā)展的很快,并建立了一個開源的社區(qū)祝辣。

接下來的一年贴妻,構建新應用時serverless會成為一個標準切油。如果你想要留在這個領域蝙斜,你需要重現(xiàn)在開始就學習它。

Serverless Framework是當前最流行的解決方案澎胡,在部署AWS Lambda functions可以幫助你孕荠。

參加會議與聚會并發(fā)言

參加會議和聚會是一個很好地方式去了解和學習新的趨勢娩鹉,開發(fā)技巧和最佳實踐。當日稚伍,這也是一個場合去認識更多新的人弯予。

To take it one step forward, I'd like to encourage you to speak at one of these events as well!
As public speaking is tough, and “imagine everyone's naked” is the worst advice, I'd recommend checking out speaking.io for tips on public speaking!

在此基礎上,我也鼓勵你在一些會議上發(fā)言个曙。

在公共場合發(fā)言是一個不容易的事情锈嫩,“imagine everyone's naked”是最壞的建議。我建議你可以去speaking.io學習一些技巧垦搬。

Become a better Node.js developer in 2017

原文鏈接

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呼寸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猴贰,更是在濱河造成了極大的恐慌对雪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件米绕,死亡現(xiàn)場離奇詭異瑟捣,居然都是意外死亡,警方通過查閱死者的電腦和手機栅干,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門迈套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碱鳞,你說我怎么就攤上這事交汤。” “怎么了劫笙?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵芙扎,是天一觀的道長。 經(jīng)常有香客問我填大,道長戒洼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任允华,我火速辦了婚禮圈浇,結果婚禮上,老公的妹妹穿的比我還像新娘靴寂。我一直安慰自己磷蜀,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愿阐,像睡著了一般豆村。 火紅的嫁衣襯著肌膚如雪驼鞭。 梳的紋絲不亂的頭發(fā)上庶弃,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天衫贬,我揣著相機與錄音,去河邊找鬼歇攻。 笑死固惯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缴守。 我是一名探鬼主播葬毫,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屡穗!你這毒婦竟也來了供常?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鸡捐,失蹤者是張志新(化名)和其女友劉穎栈暇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箍镜,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡源祈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了色迂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片香缺。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歇僧,靈堂內(nèi)的尸體忽然破棺而出图张,到底是詐尸還是另有隱情,我是刑警寧澤诈悍,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布祸轮,位于F島的核電站,受9級特大地震影響侥钳,放射性物質(zhì)發(fā)生泄漏适袜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一舷夺、第九天 我趴在偏房一處隱蔽的房頂上張望苦酱。 院中可真熱鬧,春花似錦给猾、人聲如沸疫萤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扯饶。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帝际,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工饶辙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹲诀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓弃揽,卻偏偏與公主長得像脯爪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矿微,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容