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 最佳实践异常处理——在 Async/Await 之后