npx执行过程
- 执行npx命令时,会先去node_modules/.bin路径检查npx后的命令是否存在,找到之后执行;
- 找不到,就去环境变量$PATH里面,检查npx后的命令是否存在,找到之后执行;
- 还是找不到,自动下载一个临时的依赖包最新版本在一个临时目录,然后再运行命令,运行完之后删除,不污染全局环境。
npm命令行
- npm init -y
- npm install 过程
查看信息
- npm version 关于npm的版本信息,npm -v 仅仅是版本号
- npm root 本地依赖的node_modules文件夹地址, npm root -g 全局的
- npm info lodash 查看一个包的信息(版本,依赖项,作者,关键字等)
- npm search lodash 搜索含有lodash关键字的包,就是 npm官网的搜索框搜索的机构
- npm outdated 查看当前项目安装的包是否有更新的包等
- npm ls --depth 1 当前项目安装的依赖包,--depth控制依赖树的深度, -g罗列全局的包
配置相关
- npm config
- command line npm config set
- .npmrc文件常用来配置npm镜像
- npm config get registry
- npm --registry registry.npm.taobao.org install express 临时使用
- npm config set registry registry.npm.taobao.org
- npm install -g cnpm --registry=registry.npm.taobao.org 设置一个cnpm
- npm config edit 进入编辑器编辑配置
// npm config list -a
// npm内置的配置
; "builtin" config from C:\Users\WL\AppData\Roaming\npm\node_modules\npm\npmrc
prefix = "C:\\Users\\WL\\AppData\\Roaming\\npm"
// user 自己配置的
; "user" config from C:\Users\WL\.npmrc
registry = "https://registry.npmmirror.com/"
strict-ssl = false
; "cli" config from command line options
all = true
; node bin location = C:\Program Files\nodejs\node.exe
; node version = v20.11.1
; npm local prefix = D:\vue3demo\vue3demo
; npm version = 9.6.6
; cwd = D:\vue3demo\vue3demo
; HOME = C:\Users\WL
; Run `npm config ls -l` to show all defaults.
建立软连接
- npm link 为一个包创建一个全局的软连接,其他的包可以应用这个包,这样在本地就方便测试了.分两步走
- cd ~/projects/node-redis # go into the package directory
- npm link # creates global link 第一步 查看 npm ls -g
- cd ~/projects/node-bloggy # go into some other package directory.
- npm link redis # link-install the package,第二步,这个redis是node-redis的package.json中的name,不是文件夹的名字
- 两步合成一步
- cd ~/projects/node-bloggy # go into the dir of your main project
- npm link ../node-redis # link the dir of your dependency 合成一步
- npm unlink redis 断开连接
缓存
- 当我们安装、更新或卸载包的时候,npm 会将这些包的tarball文件缓存到本地磁盘上,有助于加速将来的安装过程,再次安装的时候可以直接在缓存文件中安装,不需要在远程仓库安装
- tarball文件是一种压缩文件格式,通常用于Unix和Linux系统打包分发源代码,二进制文件,扩展名通常.tar.gz or .tgz
- npm中,tarball文件通常用于将包的所有文件(源代码,二进制文件)打包成单独的文件,以便安装和更新包。
- npm从registry.npm.org下载包时,npm i <package>时,从远程仓库下载tarball文件,然后解压缩安装该包。
- npm cache clean 清除缓存,新版不推荐使用了
- npm cache verify 验证缓存的完整性,验证缓存是否有用
- npm cache add <package> 一般不需要手动添加,安装时自动添加了
- npm cache ls 查看缓存
- npm config get cache
包的更新
- npm update 检查依赖是否有新的包可用,有就更新。
- npm update <package>
- npm audit 检查当前项目的依赖,哪些依赖有漏洞
- npm audit fix 带有修复
- npm dedupe 能够优化项目的依赖树结构
- npm prune 删除没有在package.json列出的依赖包,删除不再需要的包
帮助指令
-
npm help
npm的原理相关
- 每一个项目都有大量的依赖文件在node_modules中,多个项目独自维护自己的依赖,占用大量空间
- 扁平化安装依赖包,这样项目的两个依赖,这两个依赖都依赖了同一个包,这个包只需要下载一次就可以了。
- 幽灵依赖问题
pnpm
-
优点
- 快
- 多仓库
- strict 严格
non-flat node_modules - 高效 使用硬连接、软连接
content-addressable storage - 节省磁盘content-addressable storage
- npm是100 projects依赖同一个包,这个包在硬盘上有100份
- pnpm 使用content-addressable storage,同一个依赖磁盘只保留一份,同一个依赖不同的版本,也只保存有差异的文件。应该是以文件的hash不同确定保存的
- 加上安装速度
- 避免幽灵依赖引起的问题
-
硬链接vs软链接
-
创建非扁平化的node_modules
"dependencies": {
"@vue/shared": "workspace:*",
"@vue/reactivity": "workspace:*"
}
pnpm
- -c <path> 指定pnpm的运行目录; -w 即--workspace-root在workspace的root目录执行pnpm
- pnpm add
- pnpm add --workspace packageName packageName必须在workspace中
- pnpm add debug -w 添加到root
- pnpm store 管理磁盘的.pnpm/store 存储所以得硬链接
- pnpm store path 返回路径 每一个磁盘有一个,硬链接不能跨磁盘建立
- pnpm store add packageName 功能同pnpm add,处理不修改任何项目的package.json
- pnpm store prune 删除不需要的包