当前位置: 代码迷 >> 综合 >> npm or yarn
  详细解决方案

npm or yarn

热度:62   发布时间:2023-12-05 14:44:59.0

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

执行一个命令:

  1. 先去找当前 cwd 中有没有这样一个可执行文件
  2. 如果找到了就直接执行这个文件
  3. 找不到就会读取环境变量当中的 PATH
  4. 以此去找 PATH 中配置的每一个路径
  5. 找不到报错

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 这样的内置命令,执行其他任何命令都是最终找到一个可执行文件去执行。

路径查找规则:

  1. 先在当前命令行所在目录(CWD)中查找
  2. 然后依次去找 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

  相关解决方案