Node.js最佳实践:在2017年如何成为一名更好的Node.js开发者

Posted 野狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js最佳实践:在2017年如何成为一名更好的Node.js开发者相关的知识,希望对你有一定的参考价值。

一年前,我发表的《在2016年如何成为一名更好的Node.js开发者》成功地引起了广泛关注,因此今年我想延续去年的主题,讲讲在2017年,如何成为一名更好的Node.js开发者。


在这篇文章中,我们将展望2017年Node.js的最佳实践,最热话题,以及我们需要关注什么,来提升自身能力。让我们开始吧!



1. 使用 ES2015


去年,我们也建议大家使用ES2015,和去年相比,今年有很大的改观。


一年前,Node.js v4 LTS,仅支持57% ES2015的语法,而现在,Node.js v6 LTS,支持了99% ES2015的语法。


也就是说,如果你正在使用最新的 LTS 版本的Node,你不需要再依赖babel,就可以使用ES2015的全部特性。不过即使是这样,你在浏览器端仍然需要使用 babel。


关于更多的Node.js版本对ES2015支持的细节,我推荐大家去Node.js官网上查看。



2. 使用 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的模块。



3. 使用 javascript Standard Style


当我们谈到代码风格时,在全公司统一标准是至关重要的,只有这样,当你想要改变你的项目时,你可以从容地从一步步从头开始,而不用担心基础的构建会有不一致性。


我们在RisingStack项目中使用了 JavaScript Standard Style 来构建我们的项目。


使用 Standard,你不需要配置 .eslintrc, .jshintrc, 或 .jscsrc 。 它安装后即可直接使用,具体你可以参考这里的 Standard 规则(http://standardjs.com/rules.html#javascript-standard-style)。



4. 使用Docker —— 在 2017 年,容器将成为标配


你可以把Docker镜像当成部署容器的工具。Docker就是部署软件运行环境的一个容器,它包含了你软件运行的大部分的基础环境:代码,运行时,系统工具,系统程序库,任何你能想到需要安装的东西。


为什么应该使用 Docker?

  • 隔离了运行环境和项目代码

  • 作为一个安全工具,让你的代码更加安全

  • 轻量的Docker镜像

  • 稳定的部署

  • 通过Docker你可以在本地看到你软件的运行环境


你可以参照官方新手引导文档完成你的第一个Docker,另外推荐Kubernetes 的最佳实践作为补充。



5. 监控你的程序


当你的Node进程出现故障时,第一个知道的人应当是开发者,而不是用户。


一个开源的解决方案Prometheus可以帮助你解决进程崩溃的问题。 Prometheus是SoundCloud的一个开源工具箱,监听并报告进程崩溃问题。 Prometheus唯一的缺点是你需要手动设置并自己管理。



Trace能为我们做的

  • 警告

  • 生产环境中的内存和CPU分析

  • 分布式追踪,查找错误

  • 性能监控,

  • 保护你的npm包安全



6. 在后台进程中使用消息服务


如果你用HTTP发送消息,一旦接收服务停机了,所有消息都会丢失。但是,如果你选择一个支持持久化的传输层,比如消息队列来传输消息,你就不会有这个困扰。


如果接收服务停机,消息内容会被保持住,能够在稍后发出。如果服务没有停机,但是接收出了一点问题,服务将会在之后重试,从而保证数据不丢失。



这样的好处是,当邮路繁忙时,你可以随时横向扩展,没有邮件会被寄丢。如果你发现有大量的邮件需要同时处理,你可以添加更多的邮递员,让他们一同处理同一批邮件。


使用消息队列有很多选择:

  • RabbitMQ

  • Kafka

  • NSQ

  • AWS SQS



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


为了平衡稳定性和新特性,我们最推荐使用最新的 LTS(long-term support)版本。在写这篇文章的时候,最新的 LTS 版本是 6.9.2。


为了更方便地切换Node版本, 你可以使用 nvm。 一旦你安装了它, 切换版本只需要敲两行命令:

nvm install 6.9.2  nvm use 6.9.2



8. 使用语义版本控制(Semantic Versioning)


在几个月前我们进行了一次 Node.js 开发者调查, 这一调查让我们对人们使用语义版本控制(semver)的情况有了一些了解。


不幸地是,我们发现只有71%的调查对象使用语义版本控制来发布/使用 npm 模块。这个比例应当更高,我们的观点是,每个项目都应当使用这种版本管理方式。为什么这么说,因为当我们更新包的时候,如果没有 semver,很容易把整个项目搞崩溃。



对你的项目和模块做版本控制是很关键的,你的用户必须知道,一个模块是否发布了新版本,以及在使用新版本之前他们需要做什么。


这就是语义版本控制的来历。你的模块版本号需要包括主版本号、副版本号、补丁版本号,更具体说:

  • 主版本号 当有不兼容的API变更时,更新主版本号。

  • 副版本号 当你为模块添加新的功能(不破坏原有 API)时,更新副版本号。

  • 补丁版本号 当你对模块做向后兼容、BUG修复时,更新补丁版本号。


npm 也根据 semver 来安装你的依赖,因此,当你发布模块的时候,一定要按照 semver 的规则来更新版本号。否则,你会破坏其他依赖你模块的应用程序!



9. 保证应用的安全性


在2017年,保护你的用户信息安全将会是你构建项目的着重点。仅在2016年,就有 数百万用户账户被入侵 ,出现这个现象就是因为安全措施不到位。


想要在 Node.js 安全方面入门, 可以阅读我们的博客 Node.js Security Checklist,涵盖如下话题:

  • 安全的 HTTP Header,

  • 强制保护,

  • Session管理,

  • 不安全的依赖,

  • 数据校验


当你理解了这些基础概念, 你可以观看我的 Node 互动讨论 Surviving Web Security with Node.js !



10. 学习 Serverless


Serverless 是 AWS Lambda 提出的一个理念。该理念提出后,很快成长起来,并且建立了一个开放的开源社区。


可以预见在接下来的几年里,serverless 将成为构建新应用程序的标准。如果你想立足于这一领域的前沿,你需要从现在开始学习。


一个最流行的解决方案是 Serverless Framework, 它有助于布署 AWS Lambda 函数。



11. 参与技术大会,在会议上演讲


参加技术会议是一个学习新趋势、开发技巧和最佳实践的好方式。当然更好的是,你可以借此认识更多的人。


如果你不仅仅满足于参会,我也鼓励你在这些会议上演讲!


在公众场合演讲很难,而“把每个听众都当成小白”不是一个好建议。我推荐你去 speaking.io 学习一些演讲的小技巧。


✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦

原文:众成翻译  

http://www.zcfy.cc/article/node-js-best-practices-how-to-become-a-better-developer-in-2017-risingstack-2174.html



点击“阅读原文”,看更多

精选文章

↓↓↓

以上是关于Node.js最佳实践:在2017年如何成为一名更好的Node.js开发者的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中管理数据库连接,最佳实践?

node.js 中所需的结构化库的最佳实践

最佳实践:如何从零搭建一个元宇宙派对场景

Node.js 最佳实践异常处理——在 Async/Await 之后

10 个 Node.js 最佳实践:来自 Node 大神的智慧之光

这个开源项目,给你一个《Node.js 最佳实践》