npm run xxx发生了什么

一段简单的对话,让你知道 npm run xxx 到底发生了什么

问:为什么我们在跑项目的时候 输入 npm run dev/serve 项目就可以启动了
答:这个so easy啦 因为在package.json的sctipt中 有配置对应的脚本
比如你输入 npm run dev 实际上就是执行 webpack-cli-service serve

问:嗯 不错 那为什么要执行 npm run dev 而不直接执行 vue-cli-service serve
答:(支支吾吾的)因为简单吧 给指令重命名 简单好写
在这里插入图片描述

问:你要不再好好想想
答:这方面我还没有具体了解(心里建设 :这还需要了解吗 平时工作中又用不到 了解干嘛呢 )
在这里插入图片描述
问:作为一名老员工 怎么能不知道 那你以后怎么带新员工 怎么带徒弟呢
答:呃… 我尴尬的笑笑 我开玩笑的啦 哈哈哈…
在这里插入图片描述
私下去请教大佬朋友,… 经过一系列的讨论 终于搞明白了 nice !!!

答:我们在安装依赖的时候 是通过npm i 来执行的 如 npm i vue-cli-service 安装依赖时候会在 node_modules/.bin/ 目录中创建 好vue-cli-service 为名的几个可执行文件了。
在这里插入图片描述在这里插入图片描述
当我们执行 npm run serve 执行 vue-cli-service serve 时 虽然 没有安装 vue-cli-service的全局命令 但 npm会到 node_modules/.bin/ 目录下找到 vue-cli-service 作为脚本来执行 相当于执行了 node_modules/.bin/vue-cli-service (serve 作为参数来执行)

问:好的 明白了 那node_modules/.bin/下面vue-cli-service脚本是哪里来的呢 ???
答:node_modules下 .bin目录不是用来管理npm包的 而是表示一个个软链 打开文件可以看到文件顶部写着 #!/bin/sh ,表示这是一个脚本
软链接:类似于 Window 中的 “快捷方式” 。创建软链接会创建一个新的 快捷入口,比如为文件 a 创建了软链接文件b,文件 b 内部会指向 a 文件。当我们读取文件b的时候,系统会自动导向文件 a ,文件 b 就是文件 a 软连接。
当我们安装包的时候 如果这个包是个命令行工具包的话必须要有bin这个属性 所以在对应的安装包的package.json文件中会有相应的配置
在这里插入图片描述
当npm install的时候 npm读到这个配置 就将该文件软链接到 ./node_modules/.bin 目录下 同时还会把node_modules/.bin加入$PATH 这样就可以作为命令运行依赖程序 不用全局安装了
在这里插入图片描述
问:好的 明白了 简单来说 就是npm i 的时候,npm 就帮我们把这种软连接配置好了,其实这种软连接相当于一种映射,执行npm run xxx 的时候,就会到 node_modules/bin中找对应的映射文件,然后再找到相应的js文件来执行。我刚查了下 在node_modules/bin中 有二个vue-cli-service文件。为什么会有二个文件呢?
答:我们在window下运行 一般是使用vue-cli-service.cmd这个文件 脚本如下:
在这里插入图片描述

这个脚本会使用node去运行 vue-cli-service.js 这个文件 在node 中可以使用一系列系统相关的 api ,所以在这个 js 中可以做很多事情,例如读取并分析运行这条命令的目录下的文件,根据模板生成文件等。

# unix 系默认的可执行文件,必须输入完整文件名
vue-cli-service

# windows cmd 中默认的可执行文件,当我们不添加后缀名时,自动根据 pathext 查找文件
vue-cli-service.cmd

# Windows PowerShell 中可执行文件,可以跨平台
vue-cli-service.ps1

问:好的 回答的很详细 学到了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41645323/article/details/124942421