当输入 npm run 后发生了什么?
来看看package.json文件:
// package.json文件
{
"name": "h5",
"version": "1.0.7",
"private": true,
"scripts": {
"serve": "vue-cli-service serve"
},
}
在看下npm install它到底做了什么?执行这个命令,会把执行路径自动配置在系统的环境变量中,这样就可以作为命令运行这个程序,node_modules/.bin/ 目录下会生成三个可执行的文件,里面存放的是npm包的软链接(实际就是脚本代码),软链接会去package-lock.json文件中找模块之间的依赖关系。
package-lock.json文件,如下图所示:
问题1:为什么不直接执行 vue-cli-service serve 命令?因为操作系统不支持这个语法,控制台会报错。
在执行npm run的时候,就会到 node_modules/bin中找npm istall搭建的映射文件,然后再找到相应的js文件来执行。
问题2:.bin目录下的三个可执行文件文件是干嘛的呢?这是不同操作系统下执行对应的脚本文件。
生成的三个执行文件,如下图所示:
** 三个文件比如.ps1文件,顶部有一行代码:`#!/usr/bin/env pwsh` ,表示这是一个通过使用 pwsh 执行的脚本文件 **
# unix系统默认的可执行文件,必须输入完整文件名
lessc-service()
# windows系统cmd中默认的可执行文件,当我们不添加后缀名时,自动根据 pathext 查找文件
lessc.cmd
# Windows中PowerShell的可执行文件,可以跨平台
lessc.ps1
回到最初,当输入 npm run 后发生了什么?
比如执行:npm run serve。有个查找过程,先找本地安装(当前文件夹下的),再找全局安装(比如本地磁盘:C:\Users\86173),再找操作系统的path环境变量查找对应的可执行程序;执行时会映射到package.json 的scripts属性下的 serve 命令,这个serve命令所对应的字符串会找到node_modules/.bin/ 目录下的三个可执行文件,执行文件同样有个映射关系,映射到package-lock.json文件,通过这一文件可以找到模块之间的依赖关系,最后运行npm下载的包。