每个 Node.js 开发人员都必须遵循的 10 个最佳实践
根据 StackOverflow 开发者调查,Node.js 是近几年来开发者中最受欢迎的开发框架。它是一个开源、跨平台的后端 JavaScript 运行时环境,运行在 V8 引擎上。
Node.js 的语法简洁易懂,非常适合异步和事件驱动编程。因此,上手 Node.js 非常容易,但一旦深入高级编程,就需要应对代码的复杂性和可能出现的棘手错误。
然而,遵循 Node.js 最佳实践可以减少代码中出现错误和漏洞的可能性,并保护您的应用程序免受最常见的 Node.js 陷阱的影响。
1. 始终使用 `npm init` 创建新项目,并保存确切的包版本。
NPM 是 Node.js 包管理器,主要用于安装依赖项。创建项目时,请务必使用 `npm init` 命令,它会生成 package.json 文件。
$ mkdir my-new-project
$ cd my-new-project
$ npm init
Npm 使用 JSON 来提供关于这些字段及其具体作用的权威文档。
使用 npm install — 保存后安装软件包并将其保存为 package.json 文件中的依赖项。
例如,如果您使用 express 包,它将被写成这样:
$ npm install express — save
它会将软件包及其已安装版本保存到 package.json 文件中,如下所示。
“express”: “⁴.17.1”,
这里,开头的转义符“^”表示应用程序接受版本在“>=4.17.1<5.0.0”范围内的软件包。
因此,当团队成员运行`npm install` 命令时,它会安装该软件包的最新版本。如果最新版本与软件包的初始版本不兼容,则可能导致行为差异或错误。
因此,对于开发团队来说,保持版本一致至关重要。这可以通过使用`.npmrc`文件来实现。该文件包含一些实用属性,可以确保 `npm install` 始终更新 `package.json` 文件,并强制版本保持一致。
只需在终端运行以下命令即可轻松完成此操作。
npm install express — save — save-exact
Or
npm config set save-exact=true
运行上述命令后,依赖关系将被保存,并锁定为您安装的版本。
2. 添加脚本
NPM 提供了一种启动 Node 应用程序的标准方法。将 script 属性和对象添加到 package.json 文件中,并指定 start 键。如下所示:
“scripts”: {
“start”: “node myapp.js”
}
当用户运行 `npm start` 时,NPM 会运行 `node myapp.js`,并加载 `$PATH` 中 `node_modules/.bin` 目录下的所有依赖项。因此,无需全局安装 NPM 模块。
3. 使用环境变量
在 Node.js 中使用环境变量,可以在应用程序代码中查找 process.env 文件中的值。要确定当前运行的环境变量,请检查 NODE_ENV 环境变量。
console.log(“Running in :” + process.env.NODE_ENV);
4. 使用风格指南
如果你和团队一起开发项目,每个开发人员的编码风格必然会有所不同。大多数开发人员都倾向于遵循特定的风格指南,以提高代码的可读性。
不幸的是,如果你需要处理采用不同编码风格的代码,最终可能要花费数小时手动调整大括号、空格和制表符的位置。因此,为了保持高效,团队的最佳选择是选择一个特定的编码风格指南,并在整个项目中遵循该指南。
以下是一些知名科技公司使用的风格指南。
此外,还可以使用一些工具来确保所选样式指南的规则得到执行。
-
更漂亮
-
ESLint
-
保存时自动格式化和检查 lint
-
沙哑
-
棉絮状的
-
哈士奇和林特联合演出
-
EditorConfig
5. 异步结构
同步功能使应用程序逻辑流程易于理解。但是,它会阻塞其他代码的运行,直到自身执行完毕。
您可以使用 -trace-sync-io 标志跟踪代码中的同步函数,当遇到同步 API 时,它会显示警告。
另一方面,ES6 中的 async/await 结构为阻塞问题提供了解决方案。因此,作为 Node 开发人员,您应该使用 async/await,而不是使用同步函数。
6. 错误处理
代码中忽略错误处理会使调试变得异常困难。应用程序中的单个错误就可能造成数十亿美元的损失。因此,良好的异常管理对于应用程序至关重要。
错误处理并不能消除代码中的错误,但它可以让代码更智能地应对意外发生的情况。
处理错误的最佳方法是使用 .catch() 处理程序,它会将所有错误传播出去进行干净利落地处理。
7. 使用 V8 引擎标志避免垃圾回收。
Node.js (V8) 通过垃圾回收机制管理堆内存。它会释放栈中不再被引用的对象所占用的内存,以便为新对象的创建腾出空间。
但是,如果您的内存使用量出现无法预测的激增,则可能不是由于内存泄漏,而是由节点的空闲行为引起的。
可以通过调节应用程序的垃圾回收器来解决这个问题,您可以提高 V8 引擎标志和Chrome 调试器,以暴露垃圾回收器,从而调试内存问题。
node — expose-gc — inspect myapp.js
8. 保持应用程序无状态
如果将会话数据、用户数据、缓存等数据存储在应用程序内部,则其作用范围仅限于该特定进程。因此,需要将其存储在外部数据存储中。
保持应用程序无状态,可以使应用程序在系统故障时不会损害其服务和性能。
为了实现这一点,您可以使用像 AWS Lambda 这样的无服务器平台,这些平台默认执行无状态行为。
9. 使用日志工具
Console.log 是一个很棒的工具,但在生产应用中存在一些局限性,因此不能用于所有日志记录场景。它提供的配置选项不够丰富,例如,没有用于过滤日志的筛选选项。
Node.js 提供了多种日志框架供您在应用程序中使用。日志框架的选择取决于您的业务需求和资源限制。
Bunyan、Winston 和 Pino 都是不错的日志框架示例。它们使 Node.js 的日志记录更加简单高效。与使用代理相比,这是一种更好的日志记录方法,因为代理会增加资源消耗和延迟。
日志库有助于构建、格式化和传输日志消息,而不会增加任何相当大的开销。
10. 测试你的应用程序
在应用程序正式发布前进行测试至关重要。无论应用程序处于开发的哪个阶段,引入测试永远都不晚。
测试对于发现缺陷和漏洞至关重要,这可以保证软件质量,使软件更加可靠和易于使用。
专家建议为每个已报告的错误编写测试用例。因此,您必须了解:
-
如何重现此错误(请确保您的测试先失败!)
-
如何修复此漏洞(漏洞修复后请确保测试通过)
-
确保该漏洞不再发生。
以下是Node.js应用程序最常用的测试库
-
摩卡
-
笑话
-
茉莉花
-
艾瓦
总结
本文探讨了Node.js开发的十大最佳实践。遵循这些实践有助于您编写更优质的Node.js应用程序代码。
“如果您正在使用 Node.js 作为后端开发应用程序,不妨试试DhiWise,它支持简洁的代码架构,使您能够更快地构建可扩展的应用程序并简化代码维护。”
DhiWise 提供一流的功能和技术支持,助您更快、更高质量地开发应用程序。想了解更多信息?立即访问DhiWise!
文章来源:https://dev.to/dhiwise/10-best-practices-every-nodejs-developer-must-follow-362m
