node 和 npm 简介
node
Windows 安装 node
- 在 Node.js 官网下载
node
. 一般我们选择LTS
版本的, 因为这个相对稳定一些 - 先在电脑创建
D:\nodejs
目录, 并将Node
安装在这个目录中, 前辈说装在C
盘会有权限的问题. 该引导步骤会将node.exe
文件安装到你指定目录下, 并将该目录添加进PATH
环境变量 - 安装好之后, 在
cmd
控制台输入:node -v
, 控制台打印出版本表示安装成功. - 由于新版的
nodejs
已经集成了npm
, 所以npm
也一并安装好了. 同样可以使用cmd
命令行输入:npm -v
来测试是否成功安装. 出现版本提示表示安装成功.
Mac 使用 Homebrew 安装 node
列出所有全局模块
通过 npm list -g
(简写: npm ls -g
) 可以列出所有已经安装的全局模块
1 | F:\>npm list -g |
但是, 得到的输出信息会很冗长, 我们可以加上 --depth=0
来精简一下输出
1 | F:\>npm list -g --depth=0 |
现在输出信息就清楚了, 我们只列出了我们安装的模块和版本号
基于 node 工程
包(项目, 工程)
概念
- 在
Node.js
语言中, 包和模块并没有本质的不同, 包是在模块的基础上更深一步的抽象. - 包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。
Node.js
根据CommonJS
规范实现了包机制, 开发了npm
来解决包的发布和获取需求.
包的说明文件(package.json)
使用 package.json
能干什么
- 相当于你本地项目的一个文档说明。
- 允许你指定你项目中所使用的
node
包的版本. - 构建你的项目更加容易,便于给其他人共享。
package.json
属性详解
本质: json 对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16{
"name": "npm_command", // 包名, 全部小写,没有空格,可以使用下划线或者横线
"version": "1.0.0", // 版本, x.x.x 的格式, 符合“语义化版本规则”
"scripts": {
// 配置 npm 运行命令
"start": "node bin/www"
},
"dependencies": {
// 运行依赖的包
"jquery": "^3.2.1"
},
"devDependencies": {
// 开发依赖的包
"babel": "^6.23.0"
}
}其他内容:
1
2
3
4
5
6
7description:描述信息,有助于搜索
main: 入口文件,一般都是 index.js
scripts:支持的脚本,默认是一个空的 test
keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
author:作者信息
license:默认是 MIT
bugs:当前项目的一些错误信息,如果有的话我们可以为 init 命令设置一些默认值, 比如:
1
2
3npm set init.author.email "henrytsz@qq.com"
npm set init.author.name "henrytsz"
npm set init.license "MIT"
dependencies
的内容, 以 "weex-HTML5": "^0.3.2"
为例, 我们知道 key
是依赖的包名称, value
是这个包的版本. 那版本前面的 ^
或者版本直接是一个 *
是什么意思呢?
这就是 npm
的 Semantic versioning
, 简称 Semver
, 中文含义即”语义化版本规则”.
如果一个项目打算与别人分享, 应该从 1.0.0
版本开始. 以后要升级版本应该遵循以下标准:
- 补丁版本: 解决了
Bug
或者一些较小的更改, 增加最后一位数字, 比如1.0.1
- 小版本: 增加了新特性, 同时不会影响之前的版本, 增加中间一位数字, 比如
1.1.0
- 大版本: 大改版, 无法兼容之前的, 增加第一位数字, 比如
2.0.0
作为使用者, 我们可以在
package.json
文件中写明我们可以接受这个包的更新程度(假设当前依赖的是1.0.4
版本):如果只打算接受补丁版本的更新(也就是最后一位的改变), 就可以这么写:
- 1.0
- 1.0.x
- ~1.0.4
- 波浪线可以管理三级版本
如果接受小版本的更新(第二位的改变), 就可以这么写:
- 1
- 1.x
- ^1.0.4
- 向上的尖括号可以管理二级,三级版本
如果可以接受大版本的更新(自然接受小版本和补丁版本的改变), 就可以这么写:
- *
- x
npm(包管理工具) - 详述:
Node
包管理器(npm
)是一个由Node.js
官方提供的第三方包管理工具,npm
是一个完全由JavaScript
实现的命令行工具, 通过Node.js
执行, 因此严格来讲它不属于Node.js
的一部分.- 在最初的版本中, 我们需要在安装完
Node.js
以后手动安装npm
. 但从Node.js 0.6
开始,npm
已包含在发行包中了, 安装Node.js
时会自动安装npm
. 现在的版本大都使用6.0
以上
具体详情可查看: package.json 知多少?, NPM 如何管理依赖包版本, npm install 原理分析
npm 获取配置有 6 种方式, 优先级由高到底.
命令行参数.
--proxy http://server:port
即将 proxy 的值设为http://server:port
.环境变量. 以
npm_config_
为前缀的环境变量将会被认为是 npm 的配置属性. 如设置 proxy 可以加入这样的环境变量npm_config_proxy=http://server:port
.用户配置文件. 可以通过
npm config get userconfig
查看文件路径. 如果是 mac 系统的话默认路径就是$HOME/.npmrc
.全局配置文件. 可以通过
npm config get globalconfig
查看文件路径.mac 系统的默认路径是/usr/local/etc/npmrc
.内置配置文件。安装 npm 的目录下的 npmrc 文件。
默认配置。 npm 本身有默认配置参数,如果以上 5 条都没设置,则 npm 会使用默认配置参数。
针对 npm 配置的命令行操作
1 | npm config set <key> <value> [--global] |
在设置配置属性时属性值默认是被存储于用户配置文件中, 如果加上 --global
, 则被存储在全局配置文件中.
如果要查看 npm 的所有配置属性(包括默认配置), 可以使用 npm config ls -l
.
如果要查看 npm 的各种配置的含义, 可以使用 npm help config
.
npm 命令详解
常用命令:
npm init
: 生成package.json
npm init --yes
(简写:npm init -y
): 跳过回答问题步骤, 直接生成默认值的package.json
文件. 使用此方法时, 文件夹名字必须符合package.json
的name
命名规范npm view packageName versions
: 查看npm
服务器上所有的packageName
版本信息npm view packageName version
: 查看npm
服务器上最新的packageName
版本信息npm info packageName
: 显示包的信息npm install
(简写:npm i
): 用来安装package.json
里的相关依赖包(dependencies
和devDependencies
里的所有模块)npm install --production
: 只安装dependencies
中的内容npm install packageName --global
(简写:npm i -g packageName
): 全局安装npm install packageName --save
(简写:npm i -S packageName
): 局部安装运行依赖npm install packageName@version --save
: 安装指定版本的包(局部安装)npm install packageName --save-dev
(简写:npm i -D packageName
): 局部安装开发依赖npm list -g
(简写:npm ls -g
): 列出全局安装的模块的详细信息npm list -g --depth=0
(简写:npm ls -g --depth=0
): 列出全局安装的模块简略信息npm list packageName
(简写:npm ls packageName
): 查看本地安装的packageName
版本信息npm rm packageName --save
: 移除包并删除依赖npm config set prefix "E:\nodejs\node_global"
: 设置全局模块安装地址npm config get prefix
: 获取全局安装包的所在地址, 并且可见对应的cmd
命令npm config set registry https://registry.npm.taobao.org
: 设置npm
库npm config get registry
: 查看npm
库地址npm config set proxy http://example@proxymsn.com
: 设置代理地址npm config get proxy
: 查看代理地址npm outdated
: 检查依赖的包是否有新版本npm update packageName
: 更新指定依赖的包(如更新失败, 需要检查package.json
中语义化版本规则, 能否从当前版本升级到最新版本)npm update
: 更新所有有新版本的包
使用 npm 导致的问题
- 下载慢, 甚至下载不了
淘宝镜像
cnpm
(淘宝镜像)- 将
npm
上的包同步更新到淘宝镜像上, 目前是每 10 分钟同步一次. - 配置:
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 常用命令: 使用
cnpm
代替npm
即可 - 问题:
- 会多下载一些文件/文件夹
- 严重者会导致
webstorm
瘫痪, 就像帕金森综合征
- 将
- 修改
npm
的下载指向地址:- 配置默认镜像仓库:
npm config set registry "https://registry.npm.taobao.org"
- 只本次安装使用:
npm --registry https://registry.npm.taobao.org install
- 获取当前的下载指向地址:
npm config get registry
- 配置默认镜像仓库:
yarn Facebook 开发的包管理工具
yarn
(包管理工具)yarn
是Facebook
开源的新的包管理器, 可以用来代替npm
- 配置:
npm install yarn -g
- 特点: 有缓存, 没有自己的仓库地址
- 常用命令
1
2
3
4
5
6
7
8yarn --version
yarn
yarn init
yarn global package (全局安装)
yarn add package (局部安装)
yarn add package --dev
yarn remove package
yarn list
cyarn
使用淘宝镜像, 更快
配置:
npm install cyarn -g --registry "https://registry.npm.taobao.org"
常用命令: 将 yarn 使用 cyarn 代替即可