什么是模块化:
加载 & 导出
加载:require
var 自定义变量名 = require (‘模块’)
导出:exports
commontJs 模块规范
在node中JavaScript还有一个重要的概念:模块系统
模块作用域
如果一个模块需要直接导出某个成员,而不是以挂载的方式导出,则需要使用下面这种方式:
module.exports = add
exports 和 module.exports 区别:
原理:在node中,在每个模块代码中,都有一个自己的module对象,在module对象中,又有一个exports对象,在每个模块代码的最后面,默认有一个return module.exports
var module = {
exports ={
}
}
.....
return module.exports
如果想要导出多个元素,需要module.exports.foo,module.exports.add,太麻烦看,于是在模块文件中就有了这样的一行代码:
var exports = module.exports
因为module.exports 是一个对象,所以exports也是一个对象。
但是为什么exports.foo = ‘adkjhkas’ 不行呢?
因为对象重新赋值,那么此对象会指向另一片新开辟的空间。而模块文件下面还是module.exports ,所以不行
使用 require 加载页面
模块查找机制:
- 1.优先从缓存加载
- 2.核心模块
- 3.路径形式的模块
4.第三方模块:
所有的第三方模块,都必须通过NPM进行下载
使用的时候就可以通过require(‘包名’)的方式来加载使用:例如:require(‘art-template’)既不是核心模块,也是路径形式的模块,先找到当前文件所属目录中的node_modules目录,
然后找到node_modules /art-template,
再去找node_modules /art-template/package.json 文件,
再去找node_modules /art-template/package.json/main属性
main中就记录了art-template的入口模块
如果main是错的,或者package 根本不存在,则会自动去寻找默认备选项:index.js
如果以上都不成立,就会继续往上一级进行寻找(node_modules),如果还找不到,就会再上一级进行寻找,直到磁盘根目录,然后报错
注意:我们实际的项目中只有一个,放在网站的根目录中
使用 exports 接口来导出模块中的成员
模块标识中的’/ ‘和文件操作路径中的’/’
文件操作中的路径,可以省略’./’,但是不能只省略‘/‘,就剩’/’,’/’表示文件的根目录(C,D,E….盘)
[我们所有使用的文件操纵API都是异步的]:
在模块加载中,’./’可以省略
npm
node package manage
package.json
我们建议每一个项目都要有一个package.json文件,被称为包描述文件。
这个文件的创建方式可以通过,npm init 方式自动创建出来
使用npm安装第三方包的时候,最好都使用–save来保存这个第三方包的依赖信息
如果node_modules丢失或者删除,我们只需要npm install,就可以把所有的denpendcies里所有的依赖项都下载回来
npm网站
npmjs.com
npm命令行工具
npm是一个命令行工具,只要安装了node ,就自动有了npm
npm也有版本这个概念
可以通过在命令行中输入 npm --version
升级npm
npm install --global npm
npm常用命令
npm init
npm init-y 可以跳过向导,快速生成 package.json
npm install ‘包名’ :下载
npm install ‘包名’ –save :下载并且保存依赖项
npm intall :一次性把 package.json 中的 denpendencies 中的依赖项全部下载