Skip to content
On this page

npm run dev后发生了什么

npm run dev后发生了什么

这里以acorn为例:

  • npm install的时候会根据库源代码的package.json中的bin配置来生成node_modules/.bin下的软链接
json
"bin": {
   "acorn": "./bin/acorn"
}
  • 软链接是一个脚本,它会用node去执行node_modulesacorn/bin/acorn.js文件
    软链接有三个文件,windows执行的是cmd文件:
    acornunix默认的可执行文件
    acorn.cmdwindows cmd中默认的可执行文件
    acorn.ps1windows powershell中可执行文件,可以跨平台
sh
#!/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
 exec "$basedir/node"  "$basedir/../acorn/bin/acorn" "$@"
else 
 exec node  "$basedir/../acorn/bin/acorn" "$@"
fi

配置了bin就一定会生成软链接吗

ourcad由于没有在package.json中配置bin字段数据,所以不会在node_modules/.bin下生成软链接
配置了bin字段的所有包都会在node_modules下生成软链接吗?
是的!我在上午刚用 Monorepo+pnpm 搭建的项目里做了如下测试:
1 修改demo3中的index.ts代码,修改如下:

ts
export default class Demo3 {
   name: string
   constructor(name: string) {
       this.name = name
   }

   wakk() {
       console.log('wakk ! Demo3:', this.name)
   }
}
// 新增下面一行
console.log('脚手架搭建测试')

2 用tsc编译index.ts生成index.js 3 在demo3项目的package.json中配置了bin字段,配置如下:

json
"bin": {
   "chaochao": "./index.js"
}

4 删除所有项目的依赖(因为软链接的生成是在npm install执行的时候),回到根目录下执行pnpm install,然后查看demo1node_modules/.bin下,生成了名为chaochao的软链接 5 修改demo1的命令如下:

json
"scripts": {
   "dev": "chaochao",
}

6 执行npm run dev,控制台输出了:脚手架搭建测试。成功!

思考:
问:那么全局指令,比如pnpmyarn这些,如果不使用-g来安装,是否还可以使用这些指令?
答:如果不全局安装,需要使用npx pnpm来执行对应的命令,不能直接执行

问:如何做一个脚手架,让安装的人直接执行你的命令,就像:vue-cli install一样,而不是npm run vue-cli
答:后续补充了脚手架相关内容的学习,具体内容可以查看脚手架开发