1.模块的导入与导出
CommonJs的规范:
- 模块引用:模块通过require方法来同步加载所依赖的模块
- 模块定义:在node中一个文件就是一个模块,提供export对象导出当前模块的方法或者变量
- 模块标识:模块标识传递给require()方法的参数,可以是按驼峰命名的方式,也可以是文件路径
模块的导出:
方法一:使用module.exports对象整体导出一个变量对象或者函数
方法二:可将需要导出的变量或者函数挂载到exports对象的属性上
function fn() {
console.log('fn');
}
let student = {
username: 'Aiolimp'
}
console.log('student:', student.username);
//模块的导出
//方法一:使用module.exports对象整体导出一个变量对象或者函数
// module.exports = { student, fn }
//方法二:可将需要导出的变量或者函数挂载到exports对象的属性上
exports.fn = fn
模块的导入:
let file1 = require('./index1')
//模块路径:
//1.如果有当前相对路径,则直接从相对路径的文件中引用
//2.如果没有相对路径则从当前目录的node_modules中引用,如果还是没有就往上一层级的node_modules查找一直到F盘的根目录为止
console.log('file:', file1);
file1.fn();
2.node文件的写入
- 同步写入:
//同步写入文件
//1.导入fs
let fs = require('fs')
//2.同步打开文件
//参数一:打开的文件格式 参数二:以写入的方式
let fd = fs.openSync('demo.html', 'w');
//3.写入内容
//参数一:写入的文件 参数二:写入的内容
let str = 'hello word';
fs.writeFileSync(fd, str);
//4.退出文件
fs.closeSync(fd)
- 文件异步写入
//异步写入文件
let fs = require('fs')
fs.open('demo2.html', 'w', (err, fd) => {
console.log('创建了文件');
fs.writeFile(fd, '<h1>你好</h2>', (err) => {
if (!err) {
console.log('写入了文件');
fs.close(fd, () => {
console.log('关闭了文件');
});
} else {
console.log(err);
}
})
})
console.log('我最先输出');//异步操作 不会等待
- 文件流写入
//node文件流写入
//1.导入fs
let fs = require('fs')
//2.创建写入流
let ws = fs.createWriteStream('text1.txt')
//3.监听通道打开
ws.once('open', () => {
console.log('通道打开了');
ws.write('我真帅!')
ws.write('我真厉害!')
//写入结束
ws.end()
})
//4.监听通道关闭
ws.once('close', () => {
console.log('通道关闭了');
})
- 异步文件读取
//node异步文件读取
let fs = require('fs')
fs.readFile('demo.html', (err, data) => {
if (!err) {
console.log(data.toString())//直接读取的是二进制文件 需要toString转换为字符串
} else {
console.log(err);
}
})
console.log('读取数据');
- 异步文件读取并重新写入文件
//node异步读取并重新写入文件
let fs = require('fs')
//1.读取文件
fs.readFile('1.jpg', (err, data) => {
if (!err) {
//2.重新写入文件
fs.writeFile('2.jpg', data, (err) => {
if (!err) {
console.log('文件图片写入成功');
} else {
console.log(err);
}
})
} else {
console.log(err);
}
})
console.log('读取数据');
- 通过管道读取并写入流(pipe)
//通过管道读取并写入流
let fs = require('fs')
let rs = fs.createReadStream('demo1.html')
let ws = fs.createWriteStream('demo2.html')
//创建管道,将读取流通过管道流出
rs.pipe(ws)
- 删除指定文件(unlink)
//删除指定文件 unlink
let fs = require('fs')
fs.unlink('demo2.html', (err) => {
if (!err) {
console.log('文件删除成功');
} else {
console.log(err);
}
})
- 读取当前目录下所有文件(readdir)
//读取当前目录下所有文件 readdir
let fs = require('fs')
fs.readdir('./', (err, data) => {
if (!err) {
console.log(data);
} else {
console.log(err);
}
})
- 创建目录(mkdir)
//创建目录 mkdir
let fs = require('fs')
fs.mkdir('./img', () => {
console.log('创建目录成功');
})
- 删除目录(rmdir)
//删除目录 rmdir
let fs = require('fs')
fs.rmdir('./img', (err) => {
if (!err) {
console.log('删除目录成功');
} else {
console.log(err);//当目录不为空时,调用此方法不能删除目录
}
})
- 递归删除空目录
let fs = require('fs')
function delDir(dirpath) {
var fileArr = fs.readdirSync(dirpath);
for (var i in fileArr) {
var filePath = dirpath + '/' + fileArr[i]
//读取文件信息
var stat = fs.statSync(filePath)
//判断是文件还是目录
if (stat.isFile()) {
fs.unlinkSync(filePath)
} else if (stat.isDirectory()) {
delDir(filePath)//递归
}
}
//删除空目录
fs.rmdirSync(dirpath)
}
delDir('./img')