Skip to content
On this page

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