npm or yarn
前端包管理工具
yarn.lock / package-lock.json
yarn / npx
- yarn 可以自动找到 node_modules/.bin 下的可执行文件,npx 也可以
- yarn create => create-
- npx 可以直接执行 远端(线上)模块,一次性使用
全局安装 or 本地安装
全局安装模块:只有本地经常用到,而且与某一个特定项目无关的工具或者模块
脚手架类型的工具,建议使用 npx / yarn create,一次性使用
其他所有的模块都应该安装到项目本地。也就是在 package.json 声明这个依赖,便于后期管理
很多 CLI 模块是跟着项目走的
全局安装模块 cli 找不到的问题
$ npm config get prefix # 获取 npm 全局目录
$ npm bin --global
$ yarn config get prefix
$ yarn global bin
解决办法:先找到你这个模块具体安装到哪了,然后确保这个路径出现在 PATH
执行一个命令:
- 先去找当前 cwd 中有没有这样一个可执行文件
- 如果找到了就直接执行这个文件
- 找不到就会读取环境变量当中的 PATH
- 以此去找 PATH 中配置的每一个路径
- 找不到报错
Windows
- CMD:set PATH
- PowerShell:$env: PATH
- where xxx 找到这个命令所在的路径
Linux
- echo $PATH
- which xxx 找到这个命令所在的路径
yarn <cli-name>
/ npx <cli-name>
Node CLI 类型的模块都会提供了一个或多个 CLI 程序,所以本地安装完这些过后,在项目的 node_modules 下的 .bin 目录里就会多出一个或者多个可执行文件。后续我们可以直接通过命令去使用这个 CLI 程序。
当然了,通过前面的介绍你应该了解过,对于 node_modules 下 .bin 目录里的可执行文件,我们可以通过 npx 或者 yarn 命令快速找到,不必使用完整的路径去访问。
那如果你使用的是 yarn,你就可以直接执行 yarn <cli-name>
,这样的话 yarn 会自动找到 bin 目录下的 <cli-name>
文件。
我这里使用的是 npm 工具,所以我需要使用 npx <cli-name>
。注意这里是 npx 命令,而不是 npm。
npx 是 npm 最新版本中集成的一个工具,也就是说你只要安装了最新版的 npm 工具,你就可以直接使用 npx 命令。
yarn link
/ npm link
Node.js CLI 程序的权限问题
CLI 程序在 Linux 下要求执行入口文件必须具备执行权。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9rux8E3-1609926751532)(media/image-20200810150505722.png)]
添加执行权的方式如下:
# cli.js 是 package.json 中 bin 字段指向的文件
$ chmod 755 cli.js
$ chmod +x cli.js
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nc2DsZ6Q-1609926751537)(media/image-20200810150617879.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mSQArS7E-1609926751539)(media/image-20200810142236901.png)]
http://c.biancheng.net/view/757.html
控制台卡死问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EXUGG7p-1609926751542)(media/42F9ADA0-8F5A-476A-AE7F-3F753788095B.png)]
只要左上角的标题栏变成选择 xxx,这个时候就像是截图一样,cmd 会停留在快照状态
npm 安装模块超时 / 连接错误
# mirror config
sharp_dist_base_url = https://npm.taobao.org/mirrors/sharp-libvips/v8.9.1/
profiler_binary_host_mirror = https://npm.taobao.org/mirrors/node-inspector/
fse_binary_host_mirror = https://npm.taobao.org/mirrors/fsevents
node_sqlite3_binary_host_mirror = https://npm.taobao.org/mirrors
sqlite3_binary_host_mirror = https://npm.taobao.org/mirrors
sqlite3_binary_site = https://npm.taobao.org/mirrors/sqlite3
sass_binary_site = https://npm.taobao.org/mirrors/node-sass
electron_mirror = https://npm.taobao.org/mirrors/electron/
puppeteer_download_host = https://npm.taobao.org/mirrors
chromedriver_cdnurl = https://npm.taobao.org/mirrors/chromedriver
operadriver_cdnurl = https://npm.taobao.org/mirrors/operadriver
phantomjs_cdnurl = https://npm.taobao.org/mirrors/phantomjs
python_mirror = https://npm.taobao.org/mirrors/python
registry = https://registry.npm.taobao.org/
disturl = https://npm.taobao.org/dist
四、补充内容
命令执行过程
不管是 Windows 还是 Linux 下,除了 echo 这样的内置命令,执行其他任何命令都是最终找到一个可执行文件去执行。
路径查找规则:
- 先在当前命令行所在目录(CWD)中查找
- 然后依次去找 PATH 变量中的每一个路径
Windows 环境变量配置
macOS 环境变量配置
.bashrc .bash_profile .zshrc
## load nvm
export NVM_DIR=$HOME/.nvm
[ -s $(brew --prefix nvm)/nvm.sh ] && . $(brew --prefix nvm)/nvm.sh
[ -s $(brew --prefix nvm)/bash_completion ] && . $(brew --prefix nvm)/bash_completion## yarn global path
export PATH=$(yarn global bin):$PATH## export mirrors
export NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node
# export IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs
export NVM_NODEJS_ORG_MIRROR=$NODEJS_ORG_MIRROR
# export NVM_IOJS_ORG_MIRROR=$IOJS_ORG_MIRROR
开发一个 CLI 工具
- https://github.com/zce/m2i
- https://github.com/zce/caz