# npm 安装报错
# 1. install electron with Error: EACCES: permission denied, mkdir ...
npm config -g set unsafe-perm
npm config -g set allow-root
npm config get unsafe-perm
npm config get allow-root
# 2. 运行 npm run xxx 的时候发生了什么
第一步:会执行 package.json 中的 scripts
"scripts": {
"dev": "vue-cli-service serve"
......
}
npm run dev <=> ./node_modules/.bin/vue-cli-service serve
第二步:
Mac端
./node_modules/.bin/vue-cli-service,这个文件就是最终执行的文件。
windows端
在安装依赖完成后(npm i xxx),./node_modules/.bin/ 目录中会生成3个 vue-cli-service 为名的几个可执行文件。
(1) # unix 系统默认的可执行文件,必须输入完整文件名
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
(2) # windows cmd 中默认的可执行文件,当我们不添加后缀名时,自动根据 pathext 查找文件
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
(3) # Windows PowerShell 中可执行文件,可以跨平台
vue-cli-service.ps1
第三步:windows端,./node_modules/.bin 目录下的文件表示软连接(映射),那这个bin目录下的那些软连接文件是哪里来的呢?
它又是怎么知道这条软连接是执行哪里的呢?
node_modules/@vue/cli-service/package.json
"bin": {
"vue-cli-service": "bin/vue-cli-service.js"
}