npm run dev 的时候究竟做了什么

本文详细探讨了npm run dev命令背后的运行机制。首先,它查找package.json中的scripts,执行对应的dev命令,如vue-cli-service serve。接着解释为何不直接执行命令,因为操作系统中没有该指令,而npm在安装依赖时会在node_modules/.bin目录下创建软链接文件。这些软链接文件在package-lock.json中声明,使得npm能够找到并执行相应的js文件,避免全局安装。通过三个问题的解答,揭示了npm run dev如何成功运行而不报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

npm run dev命令应该是我们工作当中最常使用的命令,但是具体是如何运行的相信很多小伙伴都没有深入了解过,下面就npm run dev的底层运行由浅入深地进行讲解。

理解

在npm run dev的时候,首先会去项目的package.json文件里找scripts 里找对应的 dev ,然后执行 dev 的命令。

例如启动vue项目 npm run serve的时候,实际上就是执行了vue-cli-service serve 这条命令。

package.json文件

{
  "name": "h5",
  "version": "1.0.7",
  "private": true,
  "scripts": {
    "dev": "vue-cli-service serve"
   },
} 

灵魂第一问

那可能有的小伙伴会问了,为什么不直接执行vue-cli-service serve命令呢?

答:因为 直接执行vue-cli-service serve,会报错,因为操作系统中没有存在vue-cli-service这一条指令

灵魂第二问

那可能有的小伙伴又会问了,既然vue-cli-service serve这条指令不存在操作系统中,为什么执行npm run dev的时候,也就是相当于执行了vue-cli-service serve ,为什么这样它就能成功,而且不报指令不存在的错误?

答:

  • 我们在安装依赖的时候,是通过npm install 来执行的,npm 在安装依赖的时候,会在node_modules/.bin/ 目录中创建好vue-cli-service 为名的几个可执行文件。
  • .bin 目录不是任何一个 npm 包。目录下的文件,表示一个个软链接,打开文件可以看到文件顶部写着 #!/bin/sh ,表示这是一个脚本。
  • 所以当使用 npm run dev 执行 vue-cli-service serve 时,虽然没有安装 vue-cli-service的全局命令,但是 npm 会到 ./node_modules/.bin 中找到 vue-cli-service 文件作为 脚本来执行,则相当于执行了 ./node_modules/.bin/vue-cli-service serve

灵魂第三问

那可能有的小伙伴又会较真的问了,既然.bin 目录下的文件表示软连接,那这个bin目录下的那些软连接文件是哪里来的呢?它又是怎么知道这条软连接是执行哪里的呢?

答:

  • bin目录下的那些软连接存在于项目最外层的package-lock.json文件中。
  • 从 package-lock.json 中可知,当我们npm install 整个新建的vue项目的时候,npm 将 bin/vue-cli-service.js 作为 bin 声明了。
  • 所以在 npm install 时,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录下,而 npm 还会自动把node_modules/.bin加入$PATH,这样就可以直接作为命令运行依赖程序和开发依赖程序,不用全局安装了。
  • 也就是说,npm install 的时候,npm 就帮我们把这种软连接配置好了,其实这种软连接相当于一种映射,执行npm run dev 的时候,就会到 node_modules/bin中找对应的映射文件,然后再找到相应的js文件来执行。

至此经过灵魂三问相信您对于npm run dev的底层运行已经有了一些理解。

结语

本文为笔者个人学习笔记,如有谬误,还请告知,万分感谢!如果本文对你有所帮助,还请点个关注点个赞~,您的支持是笔者不断更新的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值