npm、cnpm、pnpm和yarn使用(官网、安装、命令行、上传自己的包、包版本号详解、更新卸载包、查看所有版本、同等依赖peer、可选依赖optional)
目录
npm config set registry https://registry.npm.taobao.org
npm
NodeJS包管理和分发工具。
官网
npm install packageName
安装依赖包。
--S(--save):默认的,用于写入package.json生产环境文件。
-D(--save-dev):用于写入package.json的开发环境文件。
-g(-global):全局安装,非-g的都为局部安装。下面是-g安装目录
mac全局安装目录为/User/你的用户名/.nvm/versions/node/nvm版本/bin
window全局安装目录为C:\Users\你的用户名\AppData\Roaming\npm\node_modules
局部安装通过node_modulet/.bin/packageName运行非-g下载的模块命令。
npm i packagename@版本号
自动安装指定版本的包,除指定的版本号,其余版本号自动取最新的。
版本号包括:主版本号.次版本号.补丁号
package.json中^指锁定主版本号,~指锁定主版本号和次版本号,空指锁定整个版本号,*指取最新版本。
安装git上发布的包
# 这样适合安装公司内部的git服务器上的项目
npm install git+https://git@github.com:lurongtao/gp-project.git
# 或者以ssh的方式
npm install git+ssh://git@github.com:lurongtao/gp-project.git
下图红框是通过git安装的包
npm ci
根据package-lock.json(npm i后生成的文件,用于锁定版本和记录依赖)文件安装依赖。相比npm i速度提升明显。也支持--production参数。
注意(对比npm i)
- npm ci 不能用来安装单个依赖,只能用来安装整个项目的依赖
- npm ci 会检测如果
node_modules
已经存在,则先删除再进行安装操作 - 不会更新
package.json
或package-lock.json
文件,整个安装过程是锁死的。 package-lock.json
、npm-shrinkwrap.json
文件都不存在会报错- lock 与
package.json
中版本不匹配,npm ci 直接报错中断,而不是更新 lock 文件。
推荐使用:npm ci --cache .npm --quiet --no-progress 关闭log和进度,可加快下载。
npm outdated
显示package.json中锁定版本位下其它版本位不是最新的包。
npm update
将package.json中包的锁定版本位下的其它版本位为变为最新的。
npm init -y
生成package.json模块配置文件。
此时通过npm run dev命令相当于命令行中输入./node_modules/.bin/gulp -v。
注意下面的红色框部分可以去除,运行npm run dev命令时会自动到全局去找对应的文件,没有就会去当前路径下的node_modules中寻找。
在scripts上写的脚本,通过命令行运行的环境是node的环境。
npm list
查看所有安装包的版本和依赖的安装包版本。
npm list | grep packageName
查看指定安装包的版本和依赖的安装包版本
npm install --production
只安装package.json中的生产环境包。
npm view packagename versions
查看指定包的所有版本
npm cache clean --force
清除npm缓存(下载出错后一直下载不了时使用)
npm config get registry
获取远程仓库路径。
npm config set registry https://registry.npm.taobao.org
设置远程仓库地址为淘宝镜像路径,默认的远程仓库地址为http://registry.npmjs.org。
module.exports = 变量名
也可以直接在exports上挂载变量,exports为module.exports上的引用(不能直接给exports赋值)
require('./路径') 不能直接写文件名开头,引入的是export的引用。
npm install express-generator -g命令安装
express -h选项可以列出所有可用的命令行选项
express -e直接生成服务端项目
上传自己的包
登陆npm官网,注册账号密码,执行下面命令。注意上传的包要有packgage.json文件。package.json中name为上传的包名,version为版本号,description为readme中介绍。
npm adduser
登陆用户。注意远程镜像仓库应该为http://registry.npmjs.org。如果不是需重新设置原创地址并重新登陆。
npm publish
上传自己的包。
cnpm
npm是node的包管理工具,会把项目里所有的依赖项保存在package.json
文件中。
cnpm是淘宝在中国搭建的npm副本,保证中国用户使用依赖不受网路的影响,所以速度会比较快。
安装
npm install -g cnpm --registry=https://registry.npm.taobao.org
缺点
cnpm不支持package-lock.json
1、使用cnpm install时候,并不会生成package-lock.json文件
2、cnpm install的时候,就算你项目中有package-lock.json文件,cnpm也不会识别,仍会根据package.json来安装。所以这就是为什么之前你用npm 安装产生了package-lock.json,后面的人用cnpm来安装,可能会跟你安装的依赖包不一致,这是因为cnpm 不受package-lock.json影响,只会根据package.json进行下载。
pnpm
一个包管理工具,和npm/yarn没有区别,主要优势在于
- 包安装速度极快
- 磁盘空间利用效率高
安装
npm i pnpm -g
相关概念
硬链接(Hard Link)
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接(Symbolic Link)
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
存储方式
pnpm 内部使用基于内容寻址
的文件系统来存储磁盘上所有的文件:
- 不会重复安装同一个包。使用
npm/yarn
的时候,如果100个包依赖lodash
,那么就可能安装了100次lodash
,磁盘中就有100个地方写入了这部分代码。但是pnpm
会只在一个地方写入这部分代码,后面使用会直接使用hard link
- 即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的
hardlink
,仅仅写入那一个新增的文件
。
官网与详细介绍
yarn
包管理和分发工具。下面仅列出部分和npm命令行有区别的命令。
中文官网
安装
命令行
yarn add packageName@版本号
安装依赖包。
--dev(-D):开发环境依赖,用于写入package.json的开发环境文件。
--peer(-P):同等依赖,或者叫同伴依赖(当多个包同时依赖于1个包时,需要统一这个包的版本时使用)。
--optional(-O):可选依赖,如果有一些依赖包即使安装失败,安装替代的包来使项目仍然能够运行。就可以使用optionalDependencies。注意packageName中optionalDependencies会覆盖dependencies中的同名依赖包,所以不要在两个地方都写。
yarn|yarn install
安装所有依赖包。
yarn upgrade packageName@版本号
升级依赖包到指定版本。
yarn remove packageName
卸载指定依赖包。
yarn dlx mocha --version
需要yarn2的版本,相当于npx mocha --version。用于调用项目内部安装的模块等。
更多推荐
所有评论(0)