当前位置:网站首页>process.env.NODE_ENV
process.env.NODE_ENV
2022-07-01 15:43:00 【黑猫几绛】
一、process.env
查阅文档的时候可以看到这样一句话:process 对象提供有关当前 Node.js 进程的信息并对其进行控制。
const process = require('node:process');
在计组的知识点中我们知道:process(进程)是系统进行资源分配和调度的基本单位,是操作系统结构的基础。那么,在node.js中,process是否也有操作系统结构的信息呢?
打印一下看看:
const process = require('process')
const express = require('express')
const app = express()
app.get('/',(req,res)=>{
console.log(process);
})
app.listen(port, host)
访问localhost:3000后查看控制台:

可以看到,process代表的值是计算机系统相关的信息,而process.env则表示的是系统环境变量。
理解:process可以看作是node.js中的一个全局变量。
二、NODE_ENV
注意:我本来想在文档中找找这个属性的,可是它并不存在于文档中,这是因为,NODE_ENV仅仅是一个自定义变量,据说最早是express社区中流传这个自定义变量,后来慢慢就成为了前端开发中的一个使用规范。
注意看上面那一张图片中框起来的部分,为什么会加上这个环境变量呢?
这是因为:在开发的过程中,我们可能需要同时面临多种环境。比如:
- 开发:API_URL =Ihttp://127.0.0.1:3000
- 线上部署环境:API_URL =https://imNeko:3000
这也是为什么,有时候我们在开发的时候感觉代码项目没有问题,可是部署到线上时出现了差错。
在这里我以一个基于Nuxt.js的项目中的package.json来举例:
"scripts": {
// 让 cross-env 把 NODE_ENV 设置为 development, 再运行指定文件 server/index.js
"dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
"build": "nuxt build",
"start": "cross-env NODE_ENV=production node server/index.js",
"generate": "nuxt generate"
},
从上面的代码可以看出:
当我们执行npm run dev的时候,NODE_ENV 将会被注入到 process.env 对象上,并且值为 development,我们 只 可以在 server/index.js 脚本中以及它所引入的脚本中访问到 process.env.NODE_ENV,而无法在其它脚本中访问
不过,如果采用的是webpack打包方式,注册下面这个插件既可以让其他文件访问到process.env.NODE_ENV
const webpack = require('webpack');
module.exports = {
// ...
plugins: [
// DefinePlugin允许我们创建全局变量,可以在编译时进行设置
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"development"'
})
]
// ...
}
现在看看如何在项目中切换环境变量:
let env = process.env.NODE_ENV
let cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)
let cssSourceMapProduct = (env === 'production' && config.build.productionSourceMap)
let useCssSourceMap = cssSourceMapDev || cssSourceMapProduct
我们可以根据process.env.NODE_ENV的值来选择编译打包什么文件。
2.1 设置NODE_ENV
2.1.1临时设置
在cmd窗口中输入这段代码:
set NODE_ENV = production
// set NODE_ENV = development
然后打印process:

2.1.2永久设置
在系统环境变量下面手动添加即可。
边栏推荐
- 【目标跟踪】|STARK
- 有些能力,是工作中学不来的,看看这篇超过90%同行
- 并发编程系列之什么是ForkJoin框架?
- Guide de conception matérielle du microcontrôleur s32k1xx
- 2022 Moonriver全球黑客松优胜项目名单
- TensorFlow團隊:我們沒被拋弃
- 一次革命、两股力量、三大环节:《工业能效提升行动计划》背后的“减碳”路线图...
- STM32F4-TFT-SPI时序逻辑分析仪调试记录
- Pnas: brain and behavior changes of social anxiety patients with empathic embarrassment
- Is JPMorgan futures safe to open an account? What is the account opening method of JPMorgan futures company?
猜你喜欢

软件测试的可持续发展,必须要学会敲代码?

Survey of intrusion detection systems:techniques, datasets and challenges

MySQL的零拷贝技术

工厂高精度定位管理系统,数字化安全生产管理
![[stm32-usb-msc problem help] stm32f411ceu6 (Weact) +w25q64+usb-msc flash uses SPI2 to read out only 520kb](/img/ec/fa51b21468708609f998de1b2b84fe.jpg)
[stm32-usb-msc problem help] stm32f411ceu6 (Weact) +w25q64+usb-msc flash uses SPI2 to read out only 520kb

TensorFlow团队:我们没被抛弃

微信小程序02-轮播图实现与图片点击跳转

Guide de conception matérielle du microcontrôleur s32k1xx

【一天学awk】条件与循环

Deep operator overloading (2)
随机推荐
The last picture is seamlessly connected with the first picture in the swiper rotation picture
Some abilities can't be learned from work. Look at this article, more than 90% of peers
Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results
微信小程序02-轮播图实现与图片点击跳转
【显存优化】深度学习显存优化方法
[STM32 learning] w25qxx automatic judgment capacity detection based on STM32 USB storage device
综述 | 激光与视觉融合SLAM
Équipe tensflow: Nous ne sommes pas abandonnés
Using swiper to make mobile phone rotation map
Redis seckill demo
swiper 轮播图,最后一张图与第一张图无缝衔接
Create employee data in SAP s/4hana by importing CSV
S32K1xx 微控制器的硬件设计指南
SAP S/4HANA: 一条代码线,许多种选择
说明 | 华为云云商店「商品推荐榜」
STM32F1与STM32CubeIDE编程实例-PWM驱动蜂鸣器生产旋律
Logical analysis of automatic decision of SAP CRM organization model
异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
Photoshop插件-HDR(二)-脚本开发-PS插件
Guide de conception matérielle du microcontrôleur s32k1xx