背景
有时候老是会想,我们可以在命令行中可以使用node
,npm
等命令。他是怎么找到他们的呢!在项目中,package.json
文件中存在这样的脚本:
{
"scripts": {
"serve": "vue-cli-service serve"
}
}
为什么我们可以通过npm run serve
执行这行命令来启动这个项目,但是我们直接在命令行上执行vue-cli-service serve
会报错呢!
环境变量PATH
首先,我们一定绕不开的一个概念就是环境变量,在windows系统中,环境变量是一组非常重要的变量。其中有一个更为重要的变量为PATH
变量,这个变量的作用就是给操作系统指明默认的搜索路径。
比如在命令行中输入某个可执行文件,如果在当前目录中没有找到的话,就会在PATH
变量提供的路径中逐个搜索。
环境变量
环境变量如图所示:
:::info
如图可知,环境变量分为系统变量和用户变量。他们都存在Path
变量。Path
变量是一组路径组成,由;
进行分隔。
:::
:::info
注意,启动cmd命令行的时候,会自动加载环境变量。所以如果对环境变量进行了修改,需要重新启动cmd命令行。
:::
我们可以在cmd
中,输入echo %PATH%
,查询系统环境变量PATH。
可执行文件的查询逻辑
比如我在任意路径下,打开命令行工具输入:work
。他会怎么寻找这个名叫work
的可执行文件呢?
- 先在执行该命令的当前目录中,找寻该可执行文件。没有找到,进行下一步。
- 从系统环境变量PATH中,逐个查找。没有找到进行下一步。
- 从用户环境变量PATH中,逐个查找。如果还是没有找到就报错。
一旦找到就停止查询。
所以背景
中为什么会报错的小问题,就迎刃而解了:因为当前目录下,压根不存在vue-cli-service
这个可执行文件,这个可执行文件是位于node_modules/.bin/
下。至于为什么npm run serve
命令为什么可以准确的找到这个可执行文件就涉及到scripts
脚本的知识了。