系统环境变量:Node.js环境变量在前端工程配置上的作用
Author:zhoulujun Date:
就是我们的OS(Operate System)中文译为操作系统,本质上就是一个巨大的软件。
这个电脑上运行的系统其实就是一个巨大的程序,这个程序可能就是 Windows,Linux,Mac 系统中的一种。但是本质都是程序,在这个程序里面有个环境变量。我们姑且称这个操作系统叫做妈妈吧。环境变量就是这个妈妈本身的变量。你运行其他程序的时候都是需要这个妈妈的变量,大家一起用。这就很像其他编程语言一样,就是个变量。看看维基百科对系统环境变量的介绍。
系统环境变量
环境变量是一个动态命名的值,可以影响计算机上进程的行为方式。例如一个正在运行的进程可以查询TEMP环境变量的值,以发现一个合适的位置来存储临时文件,或者查询HOME或USERPROFILE变量,以找到运行该进程的用户所拥有的目录结构。
在所有 UNIX 和 类Unix系统中, 每个进程都有其各自的环境变量设置。 缺省情况下, 当一个进程被创建时, 除了创建过程中的明确更改外,它继承了其父进程的绝大部分环境设置。 在API层级上, 使用fork和exec函数进行变量设置。或利用bash shell文件, 使用特殊的命令调用来改变环境变量:通过Env 间接替代或者使用ENVIRONMENT_VARIABLE=VALUE <command> 标识. 所有的UNIX操作系统 以及DOS 和Microsoft Windows 都是用环境变量,但是它们使用不同的环境变量名称。我们可以通过运行程序来访问环境变量的值。
环境变量的例子包括:
PATH 罗列出 shell 搜索 用户 输入的执行命令所在的目录。
Linux有很多命令,你常用的cd,pwd,cp,mkdir这些命令都是储存在 /usr/bin 里,查看:ll /usr/bin
HOME (类Unix系统) 和 userprofile (Microsoft Windows) 表示用户的家目录在文件系统中的位置。
TERM (类Unix系统) 指定使用终端或虚拟终端 的类型 (如, vt100 或 终端)。
CVS_RSH (类Unix系统) 该选项可用于 ext 方式中指明 cvs 客户端寻找远端 shell 的路径,用作连接 cvs 服务器和以更高的优先权覆盖 $CVS_RSH 环境变量中指定的路径。
MAIL (类Unix系统) 当前用户的邮件存放目录。
Windows
Windows“环境变量”是微软从DOS到Windows 10操作系统一脉相承的一种基本变量,它可以被系统功能组件、软件或用户调用。
除了如上所述的控制系统临时文件夹的环境变量TEMP外,环境变量还有许多,我们可以通过命令提示符窗口,输入SET命令查看所有可用的系统环境变量(图1)。注意:各行等号前为环境变量,等号后是该环境变量代表的具体路径或值。
C:\Windows\system32>set test=demo
通过图形界面添加,这里不展开介绍了,文章不要太多。
linux/uninx/mac
printenv或者env可以把PC所有的环境变量打印出来。
设置新的环境变量
设置临时环境变量
export NEWSAMPLE="sample" # 设置新的临时环境变量 echo $NEWSAMPLE # 在当前的窗口打印一下看看
设置永久环境变量
添加给当前用户
vi ~./zshrc # 写入 export NEWSAMPLE="sample" # 添加保存 source ~/.zshrc # 立即生效
所有用户
vi /etc/profile # 写入 export NEWSAMPLE="sample" # 添加保存
什么是临时环境变量?
简单的理解就是你现在这个命令窗口的变量,等你新开一个命令窗口,那么这个变量就不复存在,无法使用。这样的概念类似于函数的局部变量无法全部使用的感觉一样。
如何从 Node.js 读取环境变量
process是nodeJS中的全局对象global上的一个进程属性。具体查看:http://nodejs.cn/api/process.html
env是process上的一个代表环境变量的属性,所有设置的环境变量都可以通过该属性读取。
Node.js 的 process 核心模块提供了 env 属性,该属性承载了在启动进程时设置的所有环境变量。
这是访问 NODE_ENV 环境变量的示例,该环境变量默认情况下被设置为 development。
process.env.NODE_ENV // "development"在脚本运行之前将其设置为 "production",则可告诉 Node.js 这是生产环境。
http://nodejs.cn/learn/how-to-read-environment-variables-from-nodejs
process.env属性返回一个包含用户环境信息的对象。 具体参看:http://nodejs.cn/api/process.html#process_process_env
nodejs修改环境变量放到方法
修改操作系统环境变量(不推荐)
零时修改nodejs环境变量
on Windows:
set NODE_ENV=dev
on OS X or Linux:
export NODE_ENV=dev
永久修改nodejs环境变量
vim /etc/profile 进行修改
直接写在js文件:
process.env.NODE_ENV = 'production';
写在在package.json:
{ "scripts": { "start": "set NODE_ENV=dev && node app.js" } }
cross-env
cross-env 是运行跨平台设置和使用环境变量的脚本!
https://www.npmjs.com/package/cross-env
这个迷你的包能够提供一个设置环境变量的scripts,让你能够以unix方式设置环境变量,然后在windows上也能兼容运行。
如:
{ "scripts": { "build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js" } }
cross-env 也可以理解为一个 npm的插件,他可以处理 windows 和其他 unix 系统在设置环境变量的写法上不一致的问题。
NODE_ENV
NODE_ENV是一个常量名。它的独特点是,在webpack4.0+中,打包配置文件中有个属性:
mode: "production" 或者 mode: "development"
实质上是暗中完成了一个自定义变量设置:
plugins: [ new webpack.definePlugin({ 'process.env.NODE_ENV': JSON.stringify("production") // 或者 "development" }), ... ]
在webpack4.0之前的版本中一般是在package.json的scripts中命令中设置NODE_ENV的值。
"start": "cross-env NODE_ENV=development webpack-dev-server --open --config webpack.dev.js", "build": "cross-env NODE_ENV=production webpack --config webpack.prod.js"
然后在手动定义变量:
plugins: [ new webpack.definePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }), ... ]
custom-env
如何为不同的环境阶段自定义Node.js .env文件,如vue-cli通过各种 环境配置
Custom env是一个库,旨在通过允许针对不同环境的多个.env配置来简化开发。 这是通过将环境变量从.env.envname文件加载到节点的process.env对象中来完成的。
require('custom-env').env()
具体参看 https://www.npmjs.com/package/custom-env
参考文章;
简单易懂解说「到底什么是环境变量?」 https://chihokyo.com/post/6/
了解process.env.NODE_ENV https://juejin.cn/post/6873062850089680904
Node.js中环境变量process.env详解 https://www.cnblogs.com/zdz8207/p/nodejs-process-env.html
如何为不同的环境阶段自定义Node.js .env文件 https://blog.csdn.net/cumian9828/article/details/108156408
Node环境变量 process.env 的那些事儿 https://segmentfault.com/a/1190000011683741
转载本站文章《系统环境变量:Node.js环境变量在前端工程配置上的作用》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/nodejs/8678.html