Appearance
npm
npm
(node package manage)是 nodejs 自带的包管理工具
常见的命令有:
$ npm i/install [packageName]# 安装包
$ npm uninstall [packageName]# 卸载包
$ npm i/install [packageName] --save # 安装包并且写入package.json的 dependencies
$ npm i/install [packageName] --save-dev # 安装包并且写入package.json 的 devDependencies(仅开发环境)
$ npm -v # 查看当前npm版本
$ npm start # 执行package.json里script 中start命令
$ npm test # 执行package.json里script 中test命令
$ npm run dev # 执行package.json里script dev命令,除了start和test外都需要加上run
cnpm
npm 的默认官方下载源是 https://registry.npmjs.org/
,国内访问经常掉线
因此淘宝推出了 淘宝源 https://registry.npm.taobao.org
可以在安装包的时候指定下载源 npm i --registry=https://registry.npm.taobao.org
也可以使用npm config set registry https://registry.npm.taobao.org
来改变默认下载地址
不过如果想通过上传一些 npm 包之类的操作就不太合适了
幸好有 cnpm,只需要 npm install cnpm -g --registry=https://registry.npm.taobao.org
就可以用过 cnpm i
来通过国内源下载包
yarn
npm 是 nodejs 自带的包管理工具,经过十年的发展,它是世界上最大的软件注册表,每星期大约有 30 亿次的下载量,包含超过 600000 个 包(package) (即,代码模块)
最初的时候 npm 并没有想到会发展到如此之大,因此在设计上难免会有些缺陷
比如: 1、下载速度慢 2、安装速度慢 2、没有统一的版本控制,各成员之间的包版本经常不一致
为此 Google 和 Facebook 等国际大公司开发了 yarn
这个新的包管理工具
源还是旧的源 https://registry.npmjs.org/
,下载和管理包的方式 发生了重大的变化:
1、通过并行下载提高了包的下载速度 2、引入了 yarn.lock 文件,存储包之间的依赖关系,保证成员之间的包版本一致 3、有了 yarn.lock 文件,不用每次计算各个包之间的版本依赖,安装速度更快等等
具体的命令
npm install -g yarn # 安装yarn
yarn config set registry https://registry.npm.taobao.org -g ## 修改源
yarn golbal add <package> # 全局安装包
yarn install # 安装所有包 等同于 npm i
yarn add [package] # 在当前的项目中添加一个依赖包,会自动更新到package.json和yarn.lock文件中
yarn add --dev/-D # 加到 devDependencies
yarn remove <packageName> # 移除一个包,会自动更新package.json和yarn.lock
tyarn
既然有 cnpm,那么也就有 对应的 工具 tyarn
安装 npm i -g tyarn
之后 再执行 命令 tyarn
就都是从淘宝源下载包了
关于 npm 还是 yarn
其实在 yarn 推出后,npm 在 v5.* 也做了更新,引入了package-lock.json
来存储包的依赖关系
实际使用效率上,二者区别已经不太大了
不过我还是更喜欢用 yarn,理由如下:
1、yarn 的下载界面更简洁:有明确的安装进度条、没有广告(npm 有个 corejs 的作者 每次打的广告都能看到,不胜其烦) 2、cnpm 的一些问题:有时候通过 cnpm 下载的包莫名不能用,不知何解。相反用 tyarn 没有这个问题。
当然,如果接手一个已有的项目,发现已存在package-lock.json
文件就使用 npm
,发现有yarn.lock
文件就选用yarn
, 来防止和同事的包版本不一致
关于 pnpm
听说 pnpm
的速度更快,因为它采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是 yarn 的最大的性能弱点之一。
使用链接并不容易,会带来一堆问题需要考虑。
有时间,我会尝试研究下 pnpm