1.Node.js模块化开发
- Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到
- 模块内部可以使用exports(与module.exports类似,而最终的导出对象以module.exports为准)对象进行成员导出, 使用require方法导入其他模块。
// a.js
// 在模块中定义变量和方法
let age = 18;
const hello = str => `hellow,${str}`;
// 通过exprots向外部暴露变量和方法
exports.age = age;
exports.hello = hello;
// b.js
// 在别的模块中导入a.js模块 因而a.js中的变量和方法就可以在b.js中使用
let a = require('a.js');
// 调用a.js中的变量和方法
console.log(a.age); // 18
console.log(a.hello('Node'); // hellow,Node
2.系统模块
- Node运行环境提供的API称为系统模块
- Node中主要的系统模块有fs文件操作和path路径操作
2.1.fs(filesystem)文件操作
1.读取文件操作
// 引入系统模块
const fs = require('fs');
// 读取文件内容 **fs.readfile('文件路径',['文件的编码'],callback);**
fs.readFile('./01.a.js', 'utf-8', (err, doc) => {
// 如果文件读取出错err 是一个对象 包含错误信息
// 如果文件读取正确 err是 null
// doc 是文件读取的结果
if(err == null){
console.log(doc);
}else{
console.log(err);
}
});
2.写入文件内容操作
// 引入系统模块
const fs = require('fs');
// 写入内容 **fs.writeFile('文件路径', '数据', callback);**
fs.writeFile('./demo.txt', '写入的内容', err => {
if (err != null) {
console.log(err);
return;
}
console.log('*文件内容写入成功*');
})
2.2.path路径操作
1.拼接路径
在path路径的路径拼接中使用:
path.join('路径','路径',...);
示例:
// 导入path模块
const path = require('path');
let newPath = path.join('demo', 'css','a.css');
console.log(newPath); // 结果:demo/css/a.css
2.相对路径和绝对路径
- 我们通常使用绝对路径,因为相对路径是有时候相对的是命令行当前的工作目录。
- 使用__dirname能够获取当前文件的绝对路径
/******通过路径拼接实现文件的读取******/
const fs = require('fs');
const path = require('path');
// __dirname 得到当前文件的绝对路径
console.log(__dirname);
// 通过path.join()实现路径拼接
fs.readFile(path.join(__dirname, 'a.js'), 'utf-8', (err, doc) => {
if(err == null){
console.log(doc) // 当err == null 时取得a.js中的内容
}
});
3.node.js中模块的加载机制
1.模块查找规则-当模块拥有路径但没有后缀时
require('./xxx');
- require方法根据模块路径查找模块,如果是完整路径(不省略后缀),直接引入模块
- 如果模块后缀省略,先找同名JS文件再找同名JS文件夹
- 如果找到了同名文件夹,找文件夹中的index.js
- 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件
- 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到
2.模块查找规则-当模块没有路径且没有后缀时
require('xxx');
- 首先会查找系统模块
- Node.js会去node_modules文件夹中
- 首先看是否有该名字的JS文件
- 再看是否有该名字的文件夹
- 如果是文件夹看里面是否有index.js
- 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件
- 都找不到则报错