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.jsonnpm 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 代替即可