Node.js 20.6支持.env配置文件,加入C++垃圾回收函式库Oilpan

2023-09-07 11:03:48

最新版本 20.6.0 中,Node.js 现在内置了对 .env 文件的支持。现在,您可以将环境变量从 .env 文件加载到 process.env Node.js 应用程序中,完全无依赖。

加载 .env 文件现在非常简单:

node --env-file .env

什么是 .env ?

.env 文件用于配置将存在于正在运行的应用程序中的环境变量。这个想法来自十二因素应用程序方法,该方法说要存储环境中部署之间可能有所不同的所有内容(例如开发,暂存,生产)

配置不应是应用程序代码的一部分,也不应签入到版本控制中。API 凭据或其他机密等内容应单独存储,并加载到需要它们的环境中。通过文件, .env 可以管理在环境中设置变量不切实际的应用程序(如开发计算机或 CI)的配置。

有许多不同的语言的库支持使用 .env 文件将变量加载到环境中,它们通常被称为“dotenv”,Node.js dotenv 也不例外。但是现在,Node.js本身支持这种行为。

如何在 Node.js 中使用 .env ?

文件 .env 如下所示:

PASSWORD=supersecret
API_KEY=84de8263ccad4d3dabba0754e3c68b7a
# .env files can have comments too

按照惯例,您可以将其 .env 保存在项目的根目录中,尽管您可以随意调用它。

然后,您可以通过启动 Node.js将文件中的变量设置为环境变量,并将 --env-file 标志指向您的 .env 文件。加载时,变量可用作 的属性 process.env

$ node --env-file .env
Welcome to Node.js v20.6.0.
Type ".help" for more information.
> console.log(process.env.PASSWORD)
supersecret
undefined
> console.log(process.env.API_KEY)
84de8263ccad4d3dabba0754e3c68b7a
undefined

支持的功能

dotenv 相比,现在的支持是相当基本的。例如:

  • 当前无法使用多行值
  • 不能使用变量扩展
  • 一次只能指定一个文件。Node.js 将仅使用传递的最后一个标志,因此在以下示例中,仅使用 from 的 .env.development 变量:
node --env-file .env --env-file .env.development

还有更多的工作要做,其中一些功能可能会添加。您可以在此处关注 GitHub 上的讨论

缺点

从 20.6.0 版本开始,文档指出,“如果在环境和文件中定义了相同的变量,则环境中的值优先。这是所有 dotenv 包默认的工作方式。但是,目前 Node.js 的实现并非如此,文件中的 .env 变量将覆盖环境。 有一个 PR 请求来纠正这个问题。

Node.js 实现的好处

尽管此实现缺少某些功能,但与使用第三方包相比,它具有一些优势。Node.js 在文件启动时加载和分析 .env 文件,因此您可以包含配置 Node 本身的环境变量例如 NODE_OPTIONS

因此,您可以拥有一个如下所示 .env 的文件:

NODE_OPTIONS="--no-warnings --inspect=127.0.0.1:9229"

然后,当您运行时 node --env-file=.env ,该进程将运行而不发出警告,它将激活 IP 地址 127.0.0.1:9229 上的检查器。

注意:不允许您放入 NODE_OPTIONS="--env-file .env" 。避免无限循环。

C++ 垃圾回收函式库 Oilpan

另外,Node.js C++扩充套件现在支持V8中的C++垃圾回收库Oilpan,并向开发者提供新的工具和指南,以便更好地整合和管理C++与JavaScript间的物件和资源。 也就是说,在20.6之后,Node.js添加一种新颖且更有效率的C++内存管理方法,不过,原有方法仍然可用。

V8团队在2021年释出Oilpan,其特点在于提供一种追踪垃圾收集机制,能够透过标记对象来确定活对象,并于回收阶段回收死掉的对象,Oilpan也支持对某些物件进行堆碎片整理(Compaction)功能。 整体来说,Oilpan简化了程序开发模型,有助解决内存泄漏和使用后释放的问题。

现在替Node.js应用程序编写C++扩充套件的开发者,也可以使用Oilpan,但官方提醒,Node.js只是打包了来自V8的Oilpan函式库,他们无法保证ABI(Application Binary Interface)稳定性,但是因为Oilpan在Chromium中经历多年考验,他们也认为不太可能会破坏ABI。 之后当Oilpan有足够多的外部和内部采用时,官方便会考虑将其列入ABI稳定性保证中。

Node.js 20.6也在其模块系统加入了一个新的API,提供新方法让开发者可以指定档案,自定义模块的Hook,这项新功能提供了一个灵活且强大的方法,允许开发者自定义模块加载和解析行为,并且在主应用执行绪和自定义Hook执行绪间,建立沟通渠道。

Node.js 不断改进中

去试试 Node.js 版本 20.6.0!版本 20 带来了新功能,例如稳定的测试运行器、模拟计时器和现在 .env 的文件支持,以及许多其他升级、修复和改进。版本 20 在 10 月成为 Node 的活动 LTS 版本.js,因此现在是测试这些新功能并开始考虑升级应用程序以利用的好时机。

更多推荐

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道题把我给问死了:如果模块请求http改为了h

消息队列——rabbitmq的不同工作模式

目录Workqueues工作队列模式Pub/Sub订阅模式Routing路由模式Topics通配符模式工作模式总结Workqueues工作队列模式C1和C2属于竞争关系,一个消息只有一个消费者可以取到。代码部分只需要用两个消费者进程监听同一个队里即可。两个消费者呈现竞争关系。用一个生产者推送10条消息for(inti=

什么是线程?为什么需要线程?和进程的区别?

目录前言一.线程是什么?1.1.为什么需要线程1.2线程的概念1.3线程和进程的区别二.线程的生命周期三.认识多线程总结🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主🎥本文由tq02原创,首发于CSDN🙉🎄本章讲解内容:线程的讲解🎥学习专栏:C语言JavaSEMySQL基

2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV

如果有嵌入式企业需要招聘校园大使,湖南区域的日常实习,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效前言(1)已经有不少同学根据我上一篇博客完成了前三问,恭喜恭喜。有很多同学卡在了第四问。(2)我说了OpenARTmini的

React、Vue框架如何实现组件更新,原理是什么?

引言React和Vue都是当今最流行的前端框架,它们都实现了组件化开发模式。为了优化性能,两者都采用了虚拟DOM技术。当组件状态发生改变时,它们会使用虚拟DOM进行局部渲染比对,只更新必要的DOM节点,从而避免重新渲染整个组件树。本文将从React和Vue的组件更新原理入手,剖析两者虚拟DOMdifer算法的异同点。R

C语言指针详解

C语言指针详解字符指针1.如何定义2.类型和指向的内容3.代码例子指针数组1.如何定义2.类型和内容数组指针1.如何定义2.类型和指向类型3.数组名vs&数组名数组指针运用数组参数&指针参数一维数组传参二维数组传参一级指针传参二级指针传参函数指针1.如何定义2.类型和指向内容3.函数名vs&函数名4.两个有趣的代码函数

2023 电赛 E 题 K210 方案

第一章:K210介绍K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片,具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力,适用于边缘计算设备和物联网应用。为了方便开发者,K210芯片提供了丰富的外设接口,包括摄像头接口、显示接口、WiFi、蓝牙等,同时支持多种编程语言和开发环境,如MicroPyth

天气API强势对接

🤵‍♂️个人主页:@香菜的个人主页,加ischongxin,备注csdn✍🏻作者简介:csdn认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主🐋希望大家多多支持,我们一起进步!😄如果文章对你有帮助的话,欢迎评论💬点赞👍🏻收藏📂加关注+目录前言:墨迹天气数据接口1、找到目

【E题】2023年电赛运动目标控制与自动追踪系统方案

系统的设计和制作可以按照以下步骤进行:设计红色光斑位置控制系统:选择合适的红色激光笔,并将其固定在一个二维电控云台上。使用电机和编码器来控制电控云台的水平和垂直运动。设计一个控制电路,可以通过输入控制信号来控制电机的运动,从而控制红色光斑的位置。确保控制电路可以接收来自用户输入的目标位置信息,并将其转换为相应的电机控制

代客泊车对HUT功能交互规范

目录1.版本记录...72.文档范围和控制...82.1目的/范围...82.2文档冲突...82.3文档授权...82.4文档更改控制...83.系统组成...93.1IPAS系统(环视和超声波雷达)...93.2融合泊车系统(环视和泊车)...104.AVM与HUT系统交互...114.1系统框图...114.2接

MyBatis查询数据库1(概念+创建项目+基础交互)

目录1.MyBatis是什么?2.为什么学习MyBatis?3.怎么学MyBatis4.第⼀个MyBatis查询4.1添加MyBatis框架支持4.1.1老项目添加MyBatis4.1.2新项目添加MyBatis4.2配置连接字符串和MyBatis4.2.1配置连接字符串4.2.2配置MyBatis中的XML路径5.使

热文推荐