服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

【第2882期】JavaScript中的环境变量: process.env

日期: 来源:前端早读课收集编辑:飘飘

前言

通过在 vercel 部署项目时,需要配置相关环境参数。今日前端早读课文章由 @飘飘翻译分享。

正文从这开始~~

环境变量是在 JavaScript 执行环境之外定义的。

有一组环境变量是由操作系统定义的,比如说。

  • USER:当前用户

  • HOME:当前用户的主路径

  • PWD:当前的工作目录

  • PATH:要搜索的目录以执行命令

就 JavaScript 和 Node.js 生态系统而言,以下变量是常见的。

  • NODE_ENV:决定了脚本是在开发还是生产模式下运行。通常取其中一个值:productionproddevelopmentdev 或 test

  • PORT:运行中的应用程序将使用的端口(如 3000、8080 等)。

让我们看看如何在 JavaScript 文件中访问这些环境变量(无论是操作系统还是 Node.js 专用)。

1.process.env 对象

当以 Node CLI(命令行界面)命令的形式执行一个 JavaScript 文件时,Node 会创建一个特殊的 process.env 对象,其中包含作为属性的环境变量。

例如,让我们在命令行中执行 JavaScript 文件 main.js。

 cd /home/dmitri/
NODE_ENV=production node main.js

其中 main.js 文件包含以下代码。

 // /home/dmitri/main.js
console.log(process.env.USER); // dmitri
console.log(process.env.PWD); // /home/dmitri/
console.log(process.env.NODE_ENV); // production

process.env.USER 是执行该命令的操作系统用户名。该变量的值为 "dmitri",因为这是我的操作系统用户名。

process.env.PWD 包含当前工作目录的绝对路径。由于执行的文件路径是 /home/dmitri/main.js,那么当前工作目录就是 /home/dmitri/

上述变量取自操作系统的环境。

process.env.NODE_ENV 变量等于 "production"。这个变量是由 NODE_ENV=production node main.js 命令的前缀 NODE_ENV=production 定义的。

如果你想为某些环境变量提供本地默认值,那么请查看 dotenv 项目:https://github.com/motdotla/dotenv

2. 浏览器环境中的 process.env

包括 process.env 在内的环境变量,可以被运行在 CLI 中的脚本所访问。

然而,在浏览器环境中,process.env 是不可用的。

幸运的是,将环境变量暴露给浏览器运行时可以通过 bundlers 来实现。让我们看看如何使用 Vite 和 webpack 来实现。

2.1 Vite

Vite 通过 import.meta.env 对象暴露了一组预定义的变量。

  • import.meta.env.MODE:是 "development" 或 "production"。

  • import.meta.env.PROD:在 production 模式下为真。

  • import.meta.env.DEV: 在 development 模式下为真。

  • import.meta.env.SSR: 是一个布尔值,表示应用程序是否在服务器端运行。

  • import.meta.env.BASE_URL:基本 URL。

除此以外,Vite 还可以从.env 文件中加载变量。在引擎下,Vite 使用 dotenv。但你不必手动调用任何与 dotenv 有关的东西。Vite 为你做一切。

比如说,有一个这样的.env 文件。

 VITE_MY_VAR=value

那么你可以在运行时在浏览器中访问这个值 import.meta.env.VITE_MY_VAR,这将是 'value'。

请注意,Vite 只公开暴露以 VITE_为前缀的变量(但这可以配置:https://vitejs.dev/config/shared-options.html#envprefix)。

在 demo 中,Vite 提供的环境变量被呈现在网页上。

Vite 有一份关于如何访问环境变量的详细指南:https://vitejs.dev/guide/env-and-mode.html

2.2 webpack

内置插件 EnvironmentPlugin 可以在 webpack 中暴露环境变量。

例如,为了暴露 NODE_ENV 环境变量,你可以使用以下配置。

 // webpack.config.js
const { EnvironmentPlugin } = require('webpack');
module.exports = {
// ...
plugins: [
// ...
new EnvironmentPlugin(['NODE_ENV'])
]
}

打开 demo,NODE_ENV 变量被 webpack 暴露出来,并被呈现在网页上。

如果 NODE_ENV 变量在环境中不可用,该插件将抛出一个错误。但是你可以用一个普通的 JavaScript 对象作为配置,给变量分配一个默认值(值为默认值)。

 // webpack.config.js
const { EnvironmentPlugin } = require('webpack');
module.exports = {
// ...
plugins: [
// ...
new EnvironmentPlugin({
NODE_ENV: 'development'
})
]
}

在上述配置下,如果没有设置 NODE_ENV 变量,webpack 默认 process.env.NODE_ENV 为 development。

3. 结论

在 Node CLI 中执行的 JavaScript 文件可以使用特殊对象 process.env 访问环境变量。

例如,process.env.USER 包含执行脚本的用户名。

在浏览器中,环境变量在运行时是不可用的。但是像 Vite 和 webpack 这样的现代 bundlers 程序可以公开某些变量。

例如,Vite 使用 import.meta.env.MODE 暴露了当前的运行模式。在 webpack 中,EnvironmentPlugin 可以让你暴露出必要的变量。

你觉得哪些环境变量在运行时是有用的?

关于本文
译者:@飘飘
作者:@Dmitri Pavlutin
原文:https://dmitripavlutin.com/environment-variables-javascript/

这期前端早读课
对你有帮助,帮” 赞 “一下,
期待下一期,帮” 在看” 一下 。

相关阅读

  • 跟Science文章学绘图:高级绘图技能,轻松Hold住。

  • 随手转发给好友和朋友圈 编辑:科研小通《PPT拼图篇》反响良好,感谢大家的认可。今天我们继续论文图片排版的话题,说一说论文图高级排版技能: 如何准确输出期刊要求的图片格式?
  • wibu软授权

  • 本文为看雪论坛优秀文章看雪论坛作者ID:bluefish蓝鱼当你使用WIBU软授权的程序时,是否遇到过这样一个情况?你的机器需要升级或更换,但是原来授权厂商已经联系不上了,无法重新为新
  • 假如变量名允许以数字开头...

  • 将 脚本之家 设为“星标⭐”第一时间收到文章更新出品 | 麦叔编程 (ID:maishucode)已获得原公众号的授权转载假如变量名允许以数字开头...最近有同学问我,“变量名为什么宁可使
  • 视觉ChatGPT来了,微软发布,代码已开源

  • 机器之心报道编辑:陈萍、小舟Visual ChatGPT 将 ChatGPT 和一系列可视化基础模型连接起来,以支持在聊天过程中发送和接收图像。近年来,大型语言模型(LLM)取得了令人难以置信的进
  • 合并工作簿?有我很简单!

  • 前导语:在指定文件夹里,将各工作簿的工作表合并到一个新的工作簿中。操作方法:步骤1 依次单击【工作簿与工作表】组的【工作簿管理】→【合并工作簿】,打开【合并工作簿】对话
  • Alist在手,全盘我有!

  • alist可以说是把网盘玩透彻了。他自身不提供用户存储,而是为用户提供各网盘的接口为一体。做到了alist在手,全盘我有!本文让我们一起来看看吧!安装alist的安装很简单。官方提供
  • 当 App 有了系统权限,真的可以为所欲为?

  • 看到群里发了两篇文章,出于好奇,想看看这些个 App 在利用系统漏洞获取系统权限之后,都干了什么事,于是就有了这篇文章。由于准备仓促,有些 Code 没有仔细看,感兴趣的同学可以自己

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • DuckTyping.Protocol.Modular

  • 这是一个月前我在第一场客齐集小聚上做的分享。DuckTyping: 别太纠结这到底是不是智能Protocol:关键在于搞清楚它的能力边界Modular:至于它搞不定的,就给它加外挂靠别的模块来
  • 写给教师的 Prompt 使用说明

  • 昨天客齐集小聚教育者专场,近三小时的活动,panel discussion 非常精彩,大家可以从 BaixingAI 或 王建硕 的视频号看回放。开场我做了一场 CoT 和 prompt 使用方法的分享。老师
  • 【第2882期】JavaScript中的环境变量: process.env

  • 前言通过在 vercel 部署项目时,需要配置相关环境参数。今日前端早读课文章由 @飘飘翻译分享。正文从这开始~~环境变量是在 JavaScript 执行环境之外定义的。有一组环境变量是由
  • 【早说】八卦能拉近距离

  • Gossip, if you can, will quickly bring you closer together, it is said that the main purpose of human development of language is to maintain social relations. G
  • 宋徽宗“再受命”危机及其应对

  • 文丨王正伦蔡條在《铁围山丛谈》中写道,“大观、政和之间”,“日惟讲礼乐,庆祥瑞。”(蔡條:《铁围山丛谈》,以下称《丛谈》,中华书局,1983年9月第1版,第28页)北宋徽宗朝祥瑞体系建设,尤
  • 周日讲座预告 | 高林谈文学完结篇

  • 青年维也纳讲座计划2023年3月12日 高林讲座题目:☛ 高林谈文学完结篇(上 下)内容:高林:“我们和他们处在同一种生活方式的不同阶段。19世纪的马奈站在橱窗前面思考,这个东西是不