解决端口占用
netstat -ano | findstr 端口号
taskkill /f -pid 进程号
一. 什么是模块化?
解决一个复杂问题时,自项向下组成把系统划分为若干模块的过程
把代码进行模块化的好处 1.提高代码复用性 2.提高代码可维护性 3. 可以实现按需加载
1.内置模块 (有官方提供,例如 fs , path ,http)
const fs = require('fs');
2.自定义模块 (用户创建的每个js文件,都是自定义模块)
必须指定./ 或 ../开头的路径标识符,否则node会把他当做内置模块或者第三方模块进行加载
const person = require("./06.1")
console.log(person)
3.第三方模块(第三方开发的模块,使用前需要先下载)
注意 :使用require()方法加载其他模块时,会执行被加载模块中的代码
二. 模块的加载机制
1.优先从缓存中加载,多次调用require()不会导致模块的代码被执行多次
2.内置模块的加载机制 加载优先级最高
3.自定义模块的加载机制
使用require()加载自定义模块时,必须指定 ./ 或 ../开头的路径标识符
否则node会把它当做内置模块或者第三方模块进行加载
同时,导入自定义模块的时候,如果省略了文件的扩展名 则nodejs会按顺序尝试加载文件 /js /json /node /加载失败,终端报错
4.第三方模块的加载机制
不是内置,也没有 ./或../开头,会从当前模块的父目录开始尝试从node_modules文件夹中加载第三方模块
5.目录作为模块
直接传入目录作为模块加载,有三种加载方式
(1)在被加载的目录下查找一个叫package.json的文件,并寻找main属性,作为 require()加载的入口
(2)如果目录没有或者不存在没法解析,则会加载目录下的index.js
(3)都不行的话就会报错 Error: Cannot find module 'xxx‘
require("../02-模块化的基本概念/10")
三. CommonJS模块化规范
node.js遵循了CommonJS模块化规范
模块的特性和各模块之间如何相互依赖
规定:
(1)每个模块内部,module变量代表当前模块
(2)module变量是一个对象,它的exports属性(即module.exports)是对外的接口
(3)加载某个模块时,其实是加载该模块的module.exports属性,
require()方法用于加载模块