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
来测试是否成功安装。出现版本提示表示安装成功。
配置 node
- 我们要先配置 npm 的全局模块的存放路径以及 cache 的路径,例如我希望将以上两个文件夹放在 Nodejs 的主目录下,便在 Nodejs 下建立
node_global
及node_cache
两个文件夹。如下图: - 启动 cmd,输入:
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
- 后面的路径根据自己实际位置替换
安装全局模块
- 先在全局安装一个 express:
npm install express --global
,可以简写为npm install express -g
- 关闭 cmd,打开系统对话框,“我的电脑”右键“属性”-“高级系统设置”-“高级”-“环境变量”。如下图:
- 进入环境变量对话框,在系统变量下新建
NODE_PATH
,输入D:\nodejs\node_global\node_modules
。(ps:这一步相当关键。) - 由于改变了 module 的默认地址,所以上面的用户变量都要跟着改变一下(用户变量
PATH
添加一个D:\nodejs\node_global
),要不使用 module 的时候会导致输入命令出现xxx不是内部或外部命令,也不是可运行的程序或批处理文件
这个错误。 - 以上步骤都 OK 的话,我们可以再次开启 cmd 命令行,进入 node(输入
node
,回车) ,输入require('express')
来测试下 node 的模块全局路径是否配置正确了。正确的话 cmd 会列出 express 的相关信息。如下图(如出错一般都是 NODE_PATH 的配置不对,可以检查下)。 -
补充说明:
所有命令都是 -g 进行全局安装的,这样安装的安装包都在当前用户下,在磁盘的所有其他地方都可以访问到,比较方便。否则安装在当前目录下,只能在当前目录下使用。
列出所有全局模块
通过 npm list -g
可以列出所有已经安装的全局模块
F:\>npm list -g
D:\nodejs\node_global
+-- express@4.15.3
| +-- accepts@1.3.3
| | +-- mime-types@2.1.16
| | | `-- mime-db@1.29.0
| | `-- negotiator@0.6.1
| +-- array-flatten@1.1.1
| +-- content-disposition@0.5.2
| +-- content-type@1.0.2
........................
`-- less@2.7.2
+-- errno@0.1.4
| `-- prr@0.0.0
+-- graceful-fs@4.1.11
+-- image-size@0.5.5
+-- mime@1.3.6
+-- mkdirp@0.5.1
| `-- minimist@0.0.8
+-- promise@7.3.1
........................
但是,得到的输出信息会很冗长,我们可以加上 --depth=0
来精简一下输出
F:\>npm list -g --depth=0
D:\nodejs\node_global
+-- express@4.15.3
`-- less@2.7.2
现在输出信息就清楚了。我们只列出了我们安装的模块和版本号
基于 node 工程
包(项目,工程)
概念
- 在 Node.js 语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象。
- 包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。
- Node.js 根据 CommonJS 规范实现了包机制,开发了 npm 来解决包的发布和获取需求。
包的说明文件(package.json)
使用 package.json 能干什么
1. 相当于你本地项目的一个文档说明。
2. 允许你指定你项目中所使用的node包的版本。
3. 构建你的项目更加容易,便于给其他人共享。
package.json 属性详解
-
本质:json 对象
{ "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" } }
-
其他内容:
description:描述信息,有助于搜索 main: 入口文件,一般都是 index.js scripts:支持的脚本,默认是一个空的 test keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目 author:作者信息 license:默认是 MIT bugs:当前项目的一些错误信息,如果有的话
-
我们可以为 init 命令设置一些默认值,比如:
npm set init.author.email "lhajh@qq.com" npm set init.author.name "lhajh" npm set init.license "MIT"
- Semantic versioning(语义化版本规则):
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 以上。。。
npm 命令详解
- npm 命令详解 - 使用 npm 命令来下载依赖模块及对项目包(模块)进行管理 - 常用命令:
- npm init: 生成 package.json
- npm init –yes(简写:npm init -y): 跳过回答问题步骤,直接生成默认值的 package.json 文件。使用此方法时,文件夹名字必须符合 package.json 的 name 命名规范
- npm install:用来安装 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 info packageName (显示包的信息)
- npm rm packageName –save (移除包并删除依赖)
- npm config get prefix (获取全局安装包的所在地址,并且可见对应的 cmd 命令)
- npm outdated:检查依赖的包是否有新版本
- npm update packageName:更新指定依赖的包(如更新失败,需要检查 package.json 中语义化版本规则,能否从当前版本升级到最新版本)
- npm update:更新所有有新版本的包
- 阮一峰-npm 模块管理器
- 使用 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 config get registry
yarn Facebook 开发的包管理工具
- yarn(包管理工具)
- yarn 是 Facebook 开源的新的包管理器,可以用来代替 npm - 配置 npm install yarn -g
- 特点:有缓存,没有自己的仓库地址
-
常用命令
yarn --version yarn yarn init yarn global package (全局安装) yarn add package (局部安装) yarn add package --dev yarn remove package yarn list
- 地址:https://yarnpkg.com/zh-Hans/
- cyarn
- 使用淘宝镜像,更快
- 配置:
npm install cyarn -g --registry "https://registry.npm.taobao.org"
- 常用命令:将 yarn 使用 cyarn 代替即可