Node.js:包(以及 NRM 和 Yarn)

本文来自 Node.js Log 系列

当将多个模块组合起一个大模块时,可以称之为包(package)。

NPM

NpmJS 网站上下载的第三方模块都可以称作包,进行下载安装、卸载等管理的操作依赖 NPM(Node Package Manager)

NPM 在安装 Node.js 后也会一并安装,可以通过命令查看 npm 版本

查看 npm 版本
npm -v

也可以对 npm 进行升级

更新 npm 版本
sudo npm install npm --global

升级后在可以再查看下 npm 版本

包(Packages)

如果知道包的名字,可以大致查看包的信息:

查看包信息
npm info gulp
安装包
npm install -G request # 安装全局包,参数可写作 -G 或 --global
npm install request -S # 安装本地包,参数可写作 -S 或 --save
npm install request -D # 安装本地包,参数可写作 -D 或 --dev
npm install [email protected] -S # 如果对包的版本有要求,可以在包名后面带上 @版本号

全局和本地?

全局是安装到全局环境里,可以一次下载安装,在系统的各个项目里引入使用。而本地仅仅是安装到当前项目中。

全局安装可以不用每次下载该包,但是不便于针对不同项目对包的版本有不同要求的需求,全局安装也不会将包信息保存至「package.json」中。

参数?

参数「–save」可以将所安装的包的信息保存到「package.json」中「dependencies」中,即产品环境必须依赖的模块

参数「–dev」可以将所安装的包的信息保存到「package.json」中「devDependencies」中,即开发环境必须依赖的模块

将包保存至「package.json」中,项目进行版本控制或转发他人在安装测试时也会进行安装,否则会出现缺失依赖包的情况。

更新包
npm update # 更新包
npm update gulp # 更新指定包
卸载包
npm uninstall gulp # 卸载指定包

更新和卸载时视情况加上「–save」,默认是不会写进项目配置文件中的。

更多

如果想查看目前有什么可以更新的包

列出可以更新的包
npm outdated

如果想对包的版本升级进行限制

如果只允许升级三位版本号的第二位,可以在「package.json」中包的版本号最前面的覆盖改成「^」如:「”gulp”: “^2.0.0″」,这也是默认做法

如果只允许升级三位版本号的最后一位,可以在「package.json」中包的版本号最前面的覆盖改成「~」如:「”gulp”: “~2.0.0″」

如果不想做任何限制,可以直接将版本号改成「*」,如「”gulp”: “*”」

NRM | 项目地址

NRM(NPM Registry Manager) 是一个可以快速切换内置源地址的工具,可以简单的理解为各种包的服务器就是源,我们从源下载包,但是中国的网络会造成默认源网络不畅,所以可以将默认源切换到第三方镜像源来解决网络问题。

安装 nrm
npm install -g nrm
查看第三方镜像源列表
nrm ls 

结果会列出几个第三方源地址,前面带星号的就是正在使用的源地址

* npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
  taobao - https://registry.npm.taobao.org/
  nj ----- https://registry.nodejitsu.com/
  rednpm - http://registry.mirror.cqupt.edu.cn/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/

但可能你并不知道哪个源对于当前的网络比较友好,这时候可以测试一下

测试源速度
nrm test

结果:

* npm ---- 2471ms
  cnpm --- 226ms
  taobao - 122ms
  nj ----- Fetch Error
  rednpm - Fetch Error
  npmMirror  1409ms
  edunpm - Fetch Error

从结果看数值越小越好,其中「toabao」淘宝源的速度看起来不错

NRM 使用指定第三方源
nrm use taobao

之后安装包就会从淘宝源安装。

 

终于,在扯了这么多之后,我可以介绍另一个包管理工具——Yarn

什么是 Yarn | 官方网站

Yarn 是一个快速、可靠、安全的依赖管理工具。

主要作用就是替代 NPM,它所宣传的特点正是 NPM 糟糕设计所带来的 NPM 缺点:

  • 速度超快 – Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
  • 超级安全 – 在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
  • 超级可靠 – 使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。

安装 Yarn

brew install yarn --without-node

查看 Yarn 版本(亦可用作查看是否安装成功)

yarn --version

升级 Yarn

brew upgrade yarn

Yarn 和 NPM 在使用上差别不大很多命令就是把「npm」改成「yarn」,其他的在于比如安装包从「npm install packge-name -S」改成「yarn add package-name 」等等,可以查看官网文档

版本控制

在对项目进行版本控制时切记排除掉「node_modules」目录,该目录是存放项目依赖包的相关文件的,但项目需要用到哪些包及其版本都已经保存在「package.json」中,在其他地方拿到项目后

npm install # 使用 npm
yarn install # 或使用 yarn

使用 npm 或者 Yarn 进行包管理安装就能完成相关包的下载,此外排除「node_modules」目录也可以使项目文件占用减到最低。

也就是说按照之前所述例子,项目中除了项目文件,需要包含以下文件:

package.json – 项目的详细信息

.nvmrc – nvm 管理 Node.js 版本

yarn.lock – Yarn 对引入包的详细信息

最后

NPM 和 Node.js 关系紧密不得不说,但是 NPM 的使用体验非常糟糕,如果不是此篇日志我一点也不想碰 NPM,非常建议大家尝试使用 Yarn。

也就是说,在使用上,使用 NRM 将默认源改成淘宝源,使用 Yarn 管理包即可,至于 NPM,你知道是怎么回事即可。

Conners Hua

欢迎加入群聊: Telegram 群聊 | QQ 群聊(不讨论敏感话题) 如果你想学习数据分析/机器学习/人工智能编程基础,可以来优达试试

您可能还喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.