Node.js中的模块系统
目录
一、Node.js中的模块系统
使用Node编写应用程序主要就是在使用:
-
ECMAScript 语言
· 和浏览器不一样 ,在node中没有BOM、DOM
-
核心模块
· 文件操作的 fs
· http服务的http
· url路径操作模块
· path路径操作模块
· os操作 系统信息 -
第三方模块
· art-template
· 必须通过npm来下载的才可以使用
4.自己写的模块
· 自己创建的文件
二、CommonJs模块系统
1.require 加载
var 变量名 = require( '模块名称' )
两个作用:
1. 执行被加载模块的代码
2. 得到被加载模块中的 exports 导出接口对象
2.exports 导出
1. Node 中是模块作用域,默认文件中所有成员只在当前文件模块有效
2. 对于希望可以被其他模块访问的成员,我们就需要把这些公开的成员挂载到 exports
接口对象中就可以
3. 导出多个成员(必须在对象中)
module.exports = {
add: function () {
return x + y
},
str: 'hello'
}
4. 导出单个成员(拿到的就是 函数,字符串)
module.exports = add
3.原理解析
- exports 是 module.exports 的一个引用
console.log(module.exports = exports);//true
exports.foo = 'bar'
//等价于
module.exports.foo = 'bar'
- exports 和 module.exports 的区别
① 每个模块中都有一个 module
对象,每一个 module 对象中都有一个 exports
对象
② 把需要导出的成员都挂载到 module.exports
接口对象中,
也就是:module.exports.xxx = xxx
的方式
③ 但是 module.exports.xxx = xxx
的方式 不是很方便,所以 Node为了方便就提供了一个成员叫 exports
,所以module.exports.xxx = xxx
可以用 exports.xxx = xxx
代替
④ 当一个模块需要导出单个成员的时候,这个时候必须使用:module.exports = xxx
的方式,不能使用 exports = xxx
(会报错),因为每一个模块最终向外return
的是module.exports
,而 exports
是 module.exports
的一个引用 ,所以 即便你为 exports = xxx
重新赋值,也不会影响module.exports
⑤但是,有一种赋值方式比较特殊:exports = module.exports
这个用来重新建立关系
4.require标识符分析
5.第三方模块
6.文件操作路径
三、npm
1.package.json
1.建议每个项目都要有一个package.json
文件(包括描述文件,就像产品说明一样)
2.这个文件可以通过npm init
的方式来自动初始化出来
3.对于目前来讲,最有用的是 dependencies
(运行依赖)选项,可用来帮我们保存第三方包的依赖信息
4.如果不小心删除 node_modules
文件,只需要 npm install
就会自动把 package.json
中的dependencies
中所有的依赖项都下载回来
5.执行 npm install
下载包的时候加上 --save
,才会保存依赖项到 dependencies
中
6.devDependencies
是开发依赖
2.npm
1.npm 命令工具行
- npm 的第二层含义就是一个命令行工具,只要安装了node就已经安装了npm
- npm 也有版本概念
- 查看npm版本
npm --version
- 升级npm
npm install --global npm
2.npm 常用命令
- 生成
package.json
文件npm init
或者npm init -y
(可跳过向导快速生成) - 一次性把
dependencies
选项中的依赖项全部下载npm install
或者npm i
- 下载第三方包
npm install 包名
或者npm i 包名
- 下载并保存到依赖项
npm install 包名 --save
或者npm i 包名 -S
- 删除包(不会删出依赖项里面的)
npm uninstall 包名
或者npm un 包名
- 删除包同时删除依赖信息
npm uninstall 包名 --save
或者npm un 包名 -S
- 查看使用帮助
npm help
- 查看指定命令使用帮助
npm 命令 --help
3.解决npm 被墙问题
- npm存储包文件的服务器在国外,有时候会被墙,速度很慢,需要解决这个问题
- 安装淘宝镜像
npm install --global cnpm
(在任意目录下执行;--global
安装到全局;必须安装到全局,否则不管用) - 之后可把
npm
替换成cnpm
- 例如:
npm install jquery
替换成cnpm install jquery
- 如果不想使用cnpm又想通过淘宝服务器下载:
npm config set registry https://registry.npm.taobao.org
- 查看npm 配置信息
npm config list
三、修改完代码自动重启工具nodemon
- 安装:
npm install --global nodemon
- 使用:
nodemon app.js
- 自动监视文件变化,自动重启服务