Vue项目 npm run xxx执行过程

npm run dev启动项目时,实际上是执行了vue-cli-service serve命令。由于操作系统中没有vue-cli-service这个命令,npm通过在node_modules/.bin目录下创建软链接来解决。这些链接指向vue-cli-service.js文件,根据不同的操作系统(Unix、Windows CMD、Windows PowerShell)有不同的执行脚本。在执行npm install时,npm会根据package-lock.json配置创建这些软链接,并将node_modules/.bin添加到PATH环境变量,使得可以直接运行npm run dev。

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

理解npm run dev 执行过程

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
     "dev": "vue-cli-service serve",
    "build": "vue-cli-service build",
  },

启动项目的使用我们一般是使用npm run dev来启动,启动的时候,会执行vue-cli-service serve这条命令。

不直接使用vue-cli-service serve是因为操作系统中不存在该命令。

使用npm run dev能启动的原因,是项目在npm install 安装项目依赖的时候创建了vue-cli-service几个可执行的文件,在node_modules/.bin目录下。

node_modules/.bin目录下的文件,表示一个个软连接。顶部写着 #!/bin/sh ,表示这是一个脚本。

vue-cli-service 文件
vue-cli-service.cmd文件
vue-cli-service.psl文件

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

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

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

vue-cli-service文件

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

case `uname` in
    *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac

if [ -x "$basedir/node" ]; then
  "$basedir/node"  "$basedir/../@vue/cli-service/bin/vue-cli-service.js" "$@"
  ret=$?
else 
  node  "$basedir/../@vue/cli-service/bin/vue-cli-service.js" "$@"
  ret=$?
fi
exit $ret

vue-cli-service.cmd文件

@ECHO off
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

"%_prog%"  "%dp0%\..\@vue\cli-service\bin\vue-cli-service.js" %*
ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET dp0=%~dp0
EXIT /b

vue-cli-service.psl文件

#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
  # Fix case when both the Windows and Linux builds of Node
  # are installed in the same directory
  $exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
  & "$basedir/node$exe"  "$basedir/../@vue/cli-service/bin/vue-cli-service.js" $args
  $ret=$LASTEXITCODE
} else {
  & "node$exe"  "$basedir/../@vue/cli-service/bin/vue-cli-service.js" $args
  $ret=$LASTEXITCODE
}
exit $ret

node_modules/.bin目录下软件连接来源与项目下的package-lock.json文件

在项目进行 npm install 时,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录下,而 npm 还会自动把node_modules/.bin加入$PATH,这样就可以直接作为命令运行依赖程序和开发依赖程序,不用全局安装了。

所以,npm install 的时候,npm 就帮我们把这种软连接配置好了,其实这种软连接相当于一种映射,执行npm run dev 的时候,就会到 node_modules/bin中找对应的映射文件,然后再找到相应的js文件来执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值