nodejs的npm包管理和命令行工具

201 阅读3分钟

一、使用nvm(node version manager) 来管理node、npm版本

linux安装:

github.com/nvm-sh/nvm?…

windows安装(直接下载安装包):

github.com/coreybutler…

我是把nvm安装到D盘:D:\Program Files\nodejs\nvm
然后设置使用国内镜像下载nodejs和npm(国内比默认github的更慢):

nvm npm_mirror https://npmmirror.com/mirrors/npm/

nvm node_mirror https://npmmirror.com/mirrors/node/

然后查询有哪些node的版本(图中版本)

nvm list available

image.png

安装几个长期支持版本(如果下载不了,修改nvm目录权限为用户可修改)

nvm install 20.15.1

nvm install 14.21.3

或者nvm install 20 --lts(安装二零版本里长期支持的)

最后nvm use 20.15.1,使用一个版本(本地环境变量会自动使用这个版本的命令)

切换版本不会影响全局config设置,比如npm config get registry是一样的:

最后通过npm config set 设置公共设置:

cache = "D:\\Program Files\\nodejs\\node_cache"
prefix = "D:\\Program Files\\nodejs\\node_global"
registry = "https://registry.npmmirror.com"

webstorm使用的版本是C:\Program Files\nodejs这个由nvm管理的软链接的版本(所以会跟着nvm变)

image.png

注意

要让全局安装能够直接运行

把D:\Program Files\nodejs\node_global\bin加入系统环境变量path中

二、Linux使用PM2管理node脚本后台运行:

npm install pm2 -g

查看npm全局安装的脚本:npm list -g

对于想要后台运行的服务器脚本,使用 pm2 start appName启动即可

image.png

三、提供命令行运行的node脚本应该全局安装:

比如vue脚手架,create-react-app脚手架等等,node项目不会依赖它们的,只是当纯cmd命令行执行实现某个功能。

四、测试类的依赖可以安装为devDependencies,也可以支持npx运行

npx运行会把测试依赖文件放到一个缓存目录,运行完这个测试脚本后,删除缓存。(使用yarn命令会把安装过的依赖都缓存下来,下次不会从网络请求,加快加载速度)

五、每个项目的依赖应该直接安装到该项目目录下,不能使用-g安装

-g安装是安装在全局安装位置的node_modules里头

六、使用yarn

1、安装、配置

在新版本的node目录下有个命令:(nvm\v20.15.1\corepack

直接运行:corepack enable 然后 yarn -v 会提示自动下载安装yarn二进制到默认安装目录。

yarn config set registry 'https://registry.npmmirror.com'

yarn config set global-folder "D:\Program Files\nodejs\yarn_global"

yarn config set cache-folder "D:\Program Files\nodejs\yarn_cache"

最终在配置里也可以看到:

image.png

2、npm和yarn的区别

  • npm和yarn共用一个项目的package.json配置文件,写法一样
  • npm和yarn的锁定版本配置分别为:package-lock.json 和 yarn.lock,写法是不一样的
  • npm和yarn都是把依赖放到同一个node_modules里,但是目录结构有一点点不一致(直接导致只能二选一)

yarn的全局安装是 yarn global add package ,把npm的-g 参数换成 global 。

其他命令请看:yarnpkg.com/cli

3、npm项目转yarn

不考虑package-lock.json中锁定的小版本的话,

直接删除node_modules目录,然后执行yarn即可。

把package-lock.json转换为yarn.lock:

  • yarn global add synp@1.9.13
  • npx synp -s .\package-lock.json
  • 生成yarn.lock

七、使用软、硬链接的pnpm速度更快,占用空间更小

大概原理:把下载的包放到一个集中的库中,文件夹通过软链接,文件通过硬链接,其实真正的磁盘内容就一份,但软硬链接的文件夹、文件已经能够构建起node_modules的目录结构层级。

注意:pnpm的库,项目,文件,等,必须最好放到同一个磁盘中,因为硬链接的问题。

pnpm原理:

第一层直接依赖放到node_modules下级目录,其他间接依赖放到下级的同一级目录,利用了nodejs寻找依赖的原理:找下一级的时候找回到本级,直接把深层的目录结构平铺了。