引言

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的底层运行已经有了一些理解。

结语

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

npm run dev 的时候究竟做了什么相关推荐

  1. vue项目工程中npm run dev 到底做了什么

    npm install 安装了webpack框架中package.json中所需要的依赖 2.安装完成之后,需要启动整个项目运行,npm run 其实执行了package.json中的script脚本 ...

  2. npm run dev/build/serve

    npm run dev/build/serve 1.ERR引发的思考 npm run dev npm ERR! missing script: devnpm ERR! A complete log o ...

  3. 【Vue】npm run serve 和 npm run dev 有什么区别

    [Vue]npm run serve 和 npm run dev 有什么区别 Q: 我的粉丝私信我,项目中运行的npm run serve 和 npm run dev 有什么区别?什么时候用npm r ...

  4. vue npm run dev 报错 semver\semver.js:312 throw new TypeError('Invalid Version: ' + version)

    npm run dev运行报错信息如下图: 原因分析: 版本问题 解决办法: 在semver.js(node_modules/semver/semver.js)里做了一些改动,代码如下: // if ...

  5. 【webpack】输入npm run dev报错: This is probably not a problem with npm. There is likely additional loggin

    今天做项目的过程中,发现输入了npm run dev,报错提示.然后尝试去修改这个bug. 1.删除node_modules rm -rf node_modules 2.删除package-lock. ...

  6. vue让你理解npm run dev 和 npm run serve

    npm run dev     是vue-cli2.0版本使用的 npm run serve  是vue-cli3.0版本使用的 dev build serve? 在我们运行一些 vue 项目的时候, ...

  7. npm run dev 和 npm run serve

    1.ERR引发的思考 创建好的 vue 项目直接执行 vue run dev 报错?运行 vue run serve 就可以启动...如下 npm run dev npm ERR! missing s ...

  8. Node.js v17版本npm run dev 报错opensslErrorStack

    Node.js 17版本opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ] ...

  9. 输入npm run dev报错“ensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization“解决方法之一

    一.问题描述 [未解决]1.输入java -version没有反应 [已解决]2.输入npm run dev报错 opensslErrorStack: [ 'error:03000086:digita ...

最新文章

  1. Android7.0多窗口实现原理(一)
  2. 释疑の采购订单的批量修改
  3. barrier相關知識點整理(还没搞完)
  4. 为指定c 语言源程序添加行号,给自己的程序加上行号
  5. 阿里妈妈技术团队4篇论文入选WSDM 2022
  6. 华为电视鸿蒙系统好用吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试个人与团队管理10257k2
  8. php_mysql操作
  9. 关于a元素href的注意点
  10. css 宋体_6.CSS字体属性
  11. javascript 计算每行中的列数
  12. Spring——依赖注入的三种方式
  13. eclispe luna 安装subversive和svn connector插件
  14. python毕业设计作品基于django框架校园网站系统毕设成品(6)开题答辩PPT
  15. 如何用C语言打印出ASCII码表
  16. 快手抖音短视频如何解析去除视频水印
  17. java毕业设计题目
  18. WIN10系统设置默认文件查看方式
  19. 蓝桥杯算法训练—关联矩阵
  20. 磁盘性能分析Disk

热门文章

  1. Java核心编程随笔
  2. 腾讯 美团 百度 网易游戏 2015校园招聘南京笔试面试之总结分析
  3. 微信公众号的留言功能
  4. 使用@ResponseBody对象转json和@RequestBody进行json转对象案例
  5. 计算机跳转到用户选择,win7系统开机要选择用户才能进入系统怎么办
  6. arcade 物理系统_RetroPie和X-Arcade Tankstick-完美的Retro Arcade(加上键绑定,配置和操作方法)
  7. linux 课程标准,《Linux操作系统及应用》课程标准.doc
  8. CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式
  9. uniapp实现左右滑动
  10. 如何理解光圈、ISO、快门、曝光这几个概念?