1.模块系统
使用node编写应用程序主要就是使用
-
EcmaScript语言
-
核心模块
- 文件操作的fs
- HTTP服务的http
- url路径操作模块
- path路径处理模块
- os操作系统信息
- 模块名
-
第三方模块
- art-template
- 必须经过下载才可以使用
- 模块名
-
自己写的模块
- 自己创建的文件
- 文件路径
什么是模块化
- 文件作用域
- 通信规则
- 加载 require
- 导出
1.1commonJS模块规范
node中的js有模块系统:
- 模块作用域
- 使用require来加载模块
- 使用exports接口对象来到出模块中的成员
- 可以多次为这个对象添加成员实现对外导出多个内部成员
- 可以认为在每个模块最后return了这个对象
如果一个模块需要直接导出某个成员,而非挂载的方式(挂载到exports对象中),必须使用module.exports=…
加载require
语法:
var 自定义变量名称 = require('模块')
两个作用:
- 执行被加载模块中的代码
- 得到被加载模块中exports导出接口对象
导出exports
导出多个成员:必须在对象中
导出单个成员:拿到的是函数或者字符串
module.exports='hello'
//后者会覆盖前者
module.exports=function(x,y){
return x+y
}
也可以这样导出多个成员
module.exports={
add:function(){
return x+y
}
str:'hello'
}
模块原理解析
在node中,每个模块内部都有一个自己的module对象
该module对象中有个成员交exports 也是一个对象 默认为空对象 默认在代码最后一句 return module.exports
模块中还有隐藏代码 var exports=module.exports
给exports赋值会断开对module.exports之间的引用
对module.exports重新赋值也会断开引用
require规则加载方法
- 优先从缓存加载
- 由于在a中已经加载过b了,所以mian中的b不会重复加载 也不会重复执行里面的代码 只会拿到接口对象
- 避免重复加载 提高模块加载效率
- 核心模块
- 路径形式模块‘
- 第三方模块
require()中的参数被称为模块标识符
《深入浅出node.js》
npm
- node package manager
npm网站
npmjs.com
npm命令行工具
只要安装了node就安装了npm
npm也有版本这个概念、
升级npm
npm install --global npm
npm常用命令
npm uninstall
解决npm被墙问题
npm存储包文件的服务器在国外,有时候会被墙,速度很慢
http://npm.taobao.org/淘宝的开发团队把npm在国内做了备份
安装淘宝的cnpm
npm install --global cnpm
//标识安装到全局 任意目录下都可以执行
之后在安装包的时候将以前的npm全部替换为cnpm
或者
直接执行以下命令将下载地址添加到配置文件中
npm config set registry https://registry.npm.taobao.org
查看npm配置信息
npm config list
package.json
- 包描述(说明)文件
- 建议每个项目都有 就像产品说明书一样
- 建议执行npm install的时候加上–Save这个选项 目的是用来保存依赖项信息
- 可以通过
npm init
自动初始化出来npm init -y
跳过向导 快速生成 - 里面的dependencies包含了第三方包依赖信息
- 如果误删了node_modules,只需要npm install就会自动把package.json中的dependencies中所有依赖项都下载回来
express
第三方web开发框架
基于原生node高度封装了http模块
更加专注业务 而非底层细节
提高效率 使代码高度统一
npm install expross --save
步骤
1.引包
2.创建服务器应用程序
var app = express()//原来的CreateServer
极简helloword
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8oV7DY2-1626133869007)(C:\Users\甜味少女静\Pictures\QQ截图20210711172508.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVjXg1sp-1626133869009)(C:\Users\甜味少女静\Pictures\QQ截图20210711173407.png)]
响应:res.send('hello word')
序
var app = express()//原来的CreateServer
极简helloword
[外链图片转存中…(img-w8oV7DY2-1626133869007)]
[外链图片转存中…(img-MVjXg1sp-1626133869009)]
响应:res.send('hello word')