yarn的存在解决了npm的安装速度问题,提高了构建项目的速度,提高了安全性,提高了可靠性。所以yarn是一个用来管理nodejs包的更好选择。
npm介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
// 安装模块语法
$ npm install <Module Name>
// 安装模块实例(express为例)
$ npm install express
// 安装好之后,express包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过require('express'),无需指定第三方包路径
var express = require('express');
// 全局安装与本地安装
npm install express # 本地安装
npm install express -g # 全局安装
// 如果出现以下错误:
npm err! Error: connect ECONNREFUSED 127.0.0.1:8087
// 解决办法为:
npm config set proxy null
// 本地安装
1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
2. 可以通过 require() 来引入本地安装的包。
// 全局安装
1. 将安装包放在 /usr/local 下或者你 node 的安装目录。
2. 可以直接在命令行里使用。
// 如果希望具备两者功能,则需要在两个地方安装它或使用 npm link。
// 接下来我们使用全局方式安装 express
$ npm install express -g
// 安装过程输出如下内容,第一行输出了模块的版本号及安装位置。
express@4.13.3 node_modules/express
├── escape-html@1.0.2
├── range-parser@1.0.2
├── merge-descriptors@1.0.0
├── array-flatten@1.1.1
├── cookie@0.1.3
├── utils-merge@1.0.0
├── parseurl@1.3.0
├── cookie-signature@1.0.6
├── methods@1.1.1
├── fresh@0.3.0
├── vary@1.0.1
├── path-to-regexp@0.1.7
├── content-type@1.0.1
├── etag@1.7.0
├── serve-static@1.10.0
├── content-disposition@0.5.0
├── depd@1.0.1
├── qs@4.0.0
├── finalhandler@0.4.0 (unpipe@1.0.0)
├── on-finished@2.3.0 (ee-first@1.1.1)
├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1)
├── debug@2.2.0 (ms@0.7.1)
├── type-is@1.6.8 (media-typer@0.3.0, mime-types@2.1.6)
├── accepts@1.2.12 (negotiator@0.5.3, mime-types@2.1.6)
└── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)
// 查看安装信息
// 你可以使用以下命令来查看所有全局安装的模块:
$ npm list -g
├─┬ cnpm@4.3.2
│ ├── auto-correct@1.0.0
│ ├── bagpipe@0.3.5
│ ├── colors@1.1.2
│ ├─┬ commander@2.9.0
│ │ └── graceful-readlink@1.0.1
│ ├─┬ cross-spawn@0.2.9
│ │ └── lru-cache@2.7.3
// 如果要查看某个模块的版本号,可以使用命令如下:
$ npm list grunt
projectName@projectVersion /path/to/project/folder
└── grunt@0.4.1
// 使用 package.json
// package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件,位于 node_modules/express/package.json 内容:
// Package.json 属性说明
name - 包名。
version - 包的版本号。
description - 包的描述。
homepage - 包的官网 url 。
author - 包的作者姓名。
contributors - 包的其他贡献者姓名。
dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
keywords - 关键字
// 卸载模块
$ npm uninstall express
// 卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:
$ npm ls
// 更新模块
$ npm update express
// 搜索模块
$ npm search express
// 创建模块
$ npm init
//在 npm 资源库中注册用户(使用邮箱注册):
$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) mcmohd@gmail.com
// 注册完后可以来发布模块
$ npm publish
// 使用淘宝 NPM 镜像
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
// 这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]
yarn介绍
Yarn 是一个由 Facebook 贡献的 Javascript 包管理器。
速度超快。
Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
超级安全。
在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
超级可靠。
使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
// 初始化一个新项目
yarn init
// 添加依赖包
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
// 将依赖项添加到不同依赖项类别中
// 分别添加到 devDependencies、peerDependencies 和 optionalDependencies 类别中:
yarn add [package] --dev
yarn add [package] --peer
yarn add [package] --optional
// 升级依赖包
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
// 移除依赖包
yarn remove [package]
// 安装项目的全部依赖
yarn
or yarn install
比较可以看出,npm的所有功能yarn都能实现。而且npm的一些历史遗留问题,比如安装速度,安全问题,都因为yarn的存在得到很好的解决。
网友评论