脚手架
概念
bash
$ echo $PATH
$ env
- 环境变量(相当于操作系统级别的全局变量)
- 软链接(相当于 windows 系统的快捷方式)
执行过程
以 npm
为例,安装在 全局 的指令:
- 在终端输入
npm run build
- 终端在环境变量中找到
npm
命令
bash
$ which npm
$ /usr/local/bin/npm
- 终端根据
npm
命令链接到实际文件/usr/local/lib/node_modules/npm/bin/npm-cli.js
bash
$ cd /usr/local/bin
$ ll
$ lrwxr-xr-x ... npm@ -> ../lib/node_modules/npm/bin/npm-cli.js
- 终端利用
node
执行npm-cli.js
文件内容:
js
#!/usr/bin/env node
require('../lib/cli.js')(process)
- 解析 command / options
- 执行 command
- 执行完毕
安装过程
- 在
/usr/local/lib/node_modules
中安装npm
- 安装完成后会解析包中的
package.json
文件,检测文件中是否配置了bin
属性 - 若
package.json
中包含了bin
属性,则会在/usr/local/bin
目录下用 bin 中声明的 key 创建一个全局指令,并链接到 bin 中声明的 value
json
//npm package.json
"bin": {
"npm": "bin/npm-cli.js",
"npx": "bin/npx-cli.js"
},
开发
const argv = require('process').argv
- commander - npm 🌟
- yargs - npm
ansi escape code 命令行渲染标准
- chalk - npm - 颜色渲染
- ora - npm - loading 状态
- inquirer - npm - 命令行交互工具
node:url
- dirname-filename-esm - npm
- fs-extra - npm
- path-exists - npm
- glob - npm
- npmlog - npm
- semver - npm
- execa - npm
- chokidar - npm
- simple-git - npm
- SSH Remote Commands - GitHub
- webpack-chain - npm