前言
很久没有发布对外的技术文档了。看了下掘金的记录上一篇写技术文档已经是11月以前了。
为什么要写这篇文章呢?一般搭建开发环境都是需要我们配置环境变量,一些小白不知道什么是环境变量,就算配置了也不知道到底是配置了个啥,也不清楚系统是怎么使用环境变量。
什么是环境变量
我们先来说一说变量的概念。
变量来源于数学,计算机语言中能储存计算结果或能表示值的抽象概念。
相信编程的同学都知道变量是什么。接下来我们来看一段 js 的代码。
var age = 11;
var name = 'james';
console.log(`${name} is ${age} years old`);
在上面这段代码,我们声明了两个变量,一个是age、一个是name,它们的作用很简单,就是表示一个值,age表示年龄,name表示名字。
声明了变量之后我们再去使用它们,比如console.log
打印的那一段话。
那么到底什么是环境变量呢?它跟普通的变量的作用是一样的,就是表示一个值,有一个不同的是,age和name是语言级别的变量,而环境变量是电脑系统级别的变量,基本任何编程语言都可以拿到电脑的环境变量,可以利用环境变量做很多事情。
编程语言怎么拿到环境变量
这是介绍一下怎么通过编程语言拿到环境变量。这是使用的编程语言是nodejs。
nodejs有一个内置模块叫process,process有一个属性叫env,我们就可以通过这个env属性去拿到本地的环境变量,我们可以发现,env就是英语单词环境的缩写。
环境变量的值是以字符串的形式存储的,并且有一个不成文的规范,就是都是大写字母,有多个单词可以使用_
分隔。
var HOME = process.env['HOME'];
var PATH = process.env['PATH'];
console.log(HOME);
console.log(PATH);
运行以上的代码,就可以把HOME、PATH这两个环境变量打印到控制台。 其他比较热门的编程语言,也挺容易拿到环境变量的,只是写法不一样而已。
怎么查看环境变量
Windows和Mac查看本机的环境变量还是有很多差异的。
Windows
在“系统属性”界面,选择“高级”,在高级界面选择“环境变量”,即可打开变量配置界面。
接下来就是环境变量的面板。这里划分了两种环境变量,用户变量和系统变量。
- 用户变量:本质上就是环境变量,但只在当前的用户生效。比如说,我们都知道一个电脑是可以有很多种用户的,这台电脑登录了其他账户,那么用户变量也就跟着改变了。
- 系统变量:本质上就是环境变量,无论你登录了哪个用户,他都是生效的。因此,把那些和用户无关的变量定义在这里。
我们可以看到,这个面板还支持新建、编辑、删除的功能,只是增删改查面面俱到。🐂🍺
Mac
直接在终端输入env命令就可以列出所有的环境变量了。Windows的很多配置都做成可视化的,Mac的使用命令行会比较多,应该它的终端就默认有很多Linux的命令,这一点用起来非常的方便。
$ env
SHELL=/bin/zsh
HOME=/Users/wuhaojian
LOGNAME=wuhaojian
USER=wuhaojian
...
常见的环境变量有哪些?
-
HOME 作用:指定用户的主工作目录。
笔者用的是mac电脑,所以我本级的HOME是/Users/wuhaojian
。如果你用的是Windows电脑,那应该是C:/Users/wuhaojian
。 -
USER 作用:指定用户的名字。
那我的电脑当然是wuhaojian
了。 -
PATH (重点) 作用:指定命令的搜索路径。
注意:这个在Windows的环境变量面板上,叫Path。
这个就是让很多小白很头疼的地方,一般下载个开发软件,都要配置PATH的环境变量。它是与终端有关的一个环境变量,终端输入一个命令,如果不是内部命令,则会去PATH下找相应名称的文件去执行,如果找不到则报错。
假设有一种情况,你要下载一个npm包,然后在终端敲打了npm install vue
这个命令,当出现npm不是内部或外部命令,也不是可运行的程序,就证明环境变量没有配置好。
-
什么是内部命令? 就是计算机自带的一些命令,不用下载,就可以直接使用的命令。Windows有
dir、cd、ifconfig
等等,Mac上就更多了,有ls、pwd、cd、cat
等等。 -
什么是外部命令?
就是你下载的可执行文件,不是电脑自带的命令都是外部命令,比如npm命令,它的文件名称在Windows上是npm.cmd、在Mac是npm。
- 什么是可执行程序?
上面说的内部命令和外部命令都是可执行程序。可执行程序本质上就是一个文件,你可以运行这个文件,然后系统就会帮你做一些事情。可执行文件在Windows一般是.cmd结尾,也可以是不带后缀的,在Mac上一般都是不带后缀的。像test.txt、test.json
这些文件,就不是可执行文件了。试图去执行一个非可执行文件就会报错。
所以应该怎么解决这个问题呢?
假如,你的npm.cmd安装在/Users/wuhaojian/node/npm.cmd
,你就得把可执行文件的目录/Users/wuhaojian/node
添加到环境变量PATH里面去,这是当你执行npm的时候,系统就会去找环境变量PATH,然后系统发现有/Users/wuhaojian/node
,就会去这里面找npm.cmd,所以命令在这时就可以成功执行了。
实践
制造自己的命令
掌握了环境PATH变量的作用之后,就可以简单的制造属于自己的命令了。
假设,你的工作路径在/Users/wuhaojian/workspace
,你在这里新建一个文件叫hello
,然后编辑它,如下代码所示。然后给hello
文件添加一个可执行权限(因为文件被创建的时候默认是非可执行文件,这个是文件的属性,可以随机切换),chmod +x ./hello
。
#!/usr/bin/env node
console.log('hi');
下一步,把/Users/wuhaojian/workspace
配置到环境变量PATH里面去。这时候重启一下终端,就可以在终端上敲hello
,然后终端就会打印hi
。
注意:这个是nodejs程序,首先电脑必须配置好node环境。脚手架vue-cli都是这么来的。