npm run start 的时候发生了什么

笔者最近真的不知道可以写一些什么文章,于是打算整理一些自己听过但基本没详细了解过的老八股,希望能够对各位有所帮助。

1.读取package.json文件

npm会首先读取项目的package.json文件,该文件包含了项目的配置信息和依赖项。

我们可以简单看看 package.json 文件的格式:

json 复制代码
"scripts": {
  "start": "node index.js",
  "dev": "nodemon",
  "lint": "eslint **/*.js"
}

2. 查找脚本命令

package.json文件中,npm会查找scripts字段下的start命令,以确定要执行的具体操作。

我们可以看到,当我们找到 start 命令的时候,我们会单纯执行 node index.js,然后跑起来我们的项目。

那么这里会有一个问题:为什么我们不直接执行 node index.js 呢?

  1. 由于 node 我们已经安装在电脑里面了,所以上面两个命令其实没啥区别,你非要用 node index.js 也是可以的。但是有时候有一些命令没有全局安装的时候,例如第二条命令的 eslint **/*.js 。你直接执行就会报错。
ts 复制代码
eslint **/*.js
// 报错
bash: eslint: command not found
  1. 那为什么 npm run lint 就可以顺利执行呢。为了解答这个问题,我们来看看 node_modules 文件夹的.bin 目录,这个目录下的文件,都是一些软链接,打开文件可以看到文件顶部写着 #!/bin/sh ,表示这是一个脚本。所以 npm run 执行的时候,当全局没有安装相关命令的时候,就会到这里去查找。

由此我们可以知道,当使用 npm run test 执行 eslint **/*.js 时,虽然没有全局安装 eslint 的全局命令,但是 npm 会到 ./node_modules/.bin 中找到 eslint 文件作为脚本来执行,则相当于执行了 ./node_modules/.bin/eslint **/*.js

而如果我们想不用软链接的方式,直接使用全局安装的命令的话,我们就需要在安装包的时候,使用npm install -g xxx来安装这个依赖,那么就会将xxx其中的bin文件加入到全局中;这样就可以和node一样,直接使用诸如xxx build这样的命令了。

3. 安装依赖

如果项目依赖其他包或库,npm会检查并确保所有依赖都已安装。如果有缺失的依赖,它会自动安装它们。

4. 执行命令 :一旦所有依赖都准备好,npm会执行start脚本中定义的命令。

这通常是一个启动开发服务器的命令,如webpack-dev-serverreact-scripts start

5. 启动开发服务器

该命令会启动一个开发服务器,该服务器将提供热重载(hot reloading)功能,以便在代码更改时实时更新应用程序。

相关推荐
前端慢慢其修远19 分钟前
fabric.js 中originX originY center设置问题
前端·fabric
im_AMBER33 分钟前
React 04
前端·react.js·前端框架·1024程序员节
fhsWar1 小时前
Vue3 props: `required: true` 与 vant 的`makeRequiredProp`
前端·javascript·vue.js
泷羽Sec-静安2 小时前
Less-1 GET-Error based-Single quotes-String GET-基于错误-单引号-字符串
前端·css·网络·sql·安全·web安全·less
小时前端2 小时前
虚拟DOM已死?90%内存节省的Vapor模式正在颠覆前端
前端·html
Keepreal4962 小时前
Web Components简介及如何使用
前端·javascript·html
进击的野人2 小时前
JavaScript变量声明的前世今生:从var到let/const的演进
javascript
jump6802 小时前
TS中 unknown 和 any 的区别
前端
无羡仙2 小时前
AI终于‘看见’网页了!Stagewise让UI修改从‘盲调’变‘指哪打哪
前端
无心水3 小时前
深入Java线程池:BlockingQueue实现全景解析与实战指南
java·后端·面试