”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Node.js v .env 文件、导入模块和权限模型

Node.js v .env 文件、导入模块和权限模型

发布于2024-08-22
浏览:820

Node.js v .env files, import modules, and Permission Model

Node.js v20.6 已发布,其中包含令人惊叹的新功能,这些新功能是 2023 年 10 月 24 日起 LTS 版本的一部分。让我们拭目以待!

INI 配置文件

告别 dotenv 包,现在 Node.js 可以从 .env 文件加载环境变量。

node --env-file path/to/.env index.js

? INI 文件的路径是必需的,因为 Node.js 没有为 INI 文件选择默认名称。

?如果 INI 文件不存在,则节点进程不会失败,只需在没有环境变量的情况下开始运行。

正在加载NODE_OPTIONS

您可以使用 INI 配置文件加载 Node.js 的特定环境变量(如 NODE_OPTIONS),如下例所示:

NODE_NO_WARNINGS=1
NODE_OPTIONS="--experimental-permission --allow-fs-read=*"
TZ=Pacific/Honolulu
UV_THREADPOOL_SIZE=5

您可以使用相同的方法:

node --env-file .env index.js

预加载 ES 模块

在启动时使用 --import 标志预加载 ES 模块,该模块将在任何应用程序代码运行之前加载,甚至是入口点。

node --import path/to/file.js index.js

此标志类似于用于加载 CommonJS 模块的众所周知的 --require 标志。

?使用 --require 预加载的模块将在使用 --import 预加载的模块之前运行。

权限模型

我们有一个新的机制来限制在 Node.js 进程执行期间对特定资源的访问,称为权限模型。该 API 存在于标志 --experimental-permission 后面,启用该标志后,将限制对所有未明确允许的资源的访问。

文件系统权限

--allow-fs-read 标志允许使用 * 的所有 FileSystemRead 操作,或使用绝对路径的特定路径。

node --experimental-permission --allow-fs-read=* index.js

要仅允许访问特定路径,您应该使用绝对路径

node --experimental-permission --allow-fs-read=/path/to/index.js --allow-fs-read=/path/to/directory index.js

?还需要允许初始化程序模块。否则 Node.js 进程本身无法加载 index.js 文件。

?您可以使用 .允许访问工作目录,但不能使用它来指定文件的路径(例如 ./index.js)。

node --experimental-permission --allow-fs-read=. index.js

--allow-fs-write 标志允许使用 *.
访问特定路径或整个文件系统

node --experimental-permission --allow-fs-read=. --allow-fs-write=/tmp/ index.js

子进程

启用权限模型后,默认情况下该进程将无法生成任何子进程,您应该使用 --allow-child-process 来允许此操作。让我们对index.js使用以下代码。

const childProcess = require('node:child_process');
childProcess.spawn('node', ['-e', 'require("fs").writeFileSync("./new-file.txt", "Hello, World!")']);

要在启用权限模型的情况下运行此代码片段,您应该使用以下命令执行index.js:

node --experimental-permission --allow-fs-read . --allow-child-process index.js

?子进程默认不会继承权限模型,所以new-file.txt创建成功。

更多选择

如果您想在此权限模型下创建工作线程,则可以检查 --allow-worker 标志,并检查 --allow-wasi 以允许创建 WASI 实例

结论

我们有很多新工具来为我们的应用程序加载环境变量,一种导入代码中所需的预加载 ES 模块的方法,以及一个新的权限模型来提高我们系统的安全性。

请继续关注 Node.js 的博客,该团队正在每个版本中添加很棒的功能!我们在 v22.6.0 中提供了初始 TypeScript 支持和使用 DevTools 的网络检查。

版本声明 本文转载于:https://dev.to/cloudx/nodejs-v20-env-files-import-modules-and-permission-model-2fd9?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-05-01
  • Pandas多字段分组差异计算方法
    Pandas多字段分组差异计算方法
    Grouped Differences in Pandas with Multiple FieldsIn this situation, we aim to calculate the differences in scores for different site and country comb...
    编程 发布于2025-05-01
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的python功能eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-01
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-01
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-05-01
  • 在Go语言中如何简洁定义10的幂常量
    在Go语言中如何简洁定义10的幂常量
    在GO 利用浮点线文字一种简洁的方式是使用浮点文字,该方法是使用floingpoint protals。写作1E3比写作1000更有效。这是一个示例(67个没有空间的字符):的文字用于未构图的整数常数,我们可以将1000用于KB,并用KB将随后的常量乘以KB,如下所示(77个没有空格的字符):,作...
    编程 发布于2025-05-01
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-05-01
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-05-01
  • Pandas长格式转宽格式详解:逐步指南
    Pandas长格式转宽格式详解:逐步指南
    在pandas中从长到宽的数据:综合指南 将数据从长到宽的格式转换为pandas,尤其是在使用Melt/stack/stack/unstack方法时。例如,考虑以下长格式数据框架:, “高度”:[6,6,6,5], “产品”:['蝙蝠',“球”,“魔杖”,“笔”],...
    编程 发布于2025-05-01
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-05-01
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-05-01
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-05-01
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-05-01
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-05-01
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-05-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3