模块
在 Node.js 模块系统中,每个文件都被视为独立的模块。
导入模块
引入一个文件 形式模块
导出模块
module.exports
let a = 10; class Person{ constructor(){ this.name = "张三"; } hobby(){ console.log("喜欢篮球"); } } module.exports = { a, Person }
|
exports
let a = 10; class Person{ constructor(){ this.name = "张三"; } hobby(){ console.log("喜欢篮球"); } } exports.a = a; exports.Person = Person;
|
node_modules
里面有package.json
配置文件 然后可以直接倒入这个文件下面 模块包
如下面有个 mymo的文件 里面有package.json
并且 main 字段为 index.js
那么我导入这个文件夹的时候就会去查找 index.js
这个文件然后倒入
name-包名 version--包的版本号。 description-包的描述。 homepage-包的官网RL author- https: //npmjs.org, contributors-包的其他贡献者。 dependencies/ devDependencies-生产开发环境依赖包列表。它们将会被安装在 node_module目录下。 repository-包代码的Repo信息,包括type和URl,type可以是git或svn,L则是包的Repo地址。 main - main字段指定了程序的主入口文件, require(moduleName'')就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js keywords-关键字
|
fs文件操作
文件操作
所有的文件操作 没有加Sync 都是异步操作 否则就是同步操作
文件读取
异步读取
let fs = require("fs"); fs.readFile("1.txt",(err,data)=>{ if(err){ return console.log(err); } console.log(data.toString()); })
|
同步读取
let fs = require("fs"); let res = fs.readFileSync("1.txt"); console.log(res.toString());
|
文件写入
let fs = require("fs");
fs.writeFile("2.txt","我是要写入的内容",{flag:"w"},err=>{ if(err){ return console.log(err); } console.log("写入成功"); })
|
文件删除
fs.unlink("2.txt",err=>{ if(err){ return console.log(err); } console.log("删除成功"); })
|
复制文件
先读取文件再写入文件
fs.copyFile("index1.html","index2.html",err=>{ if(err){ return console.log("失败") } console.log("成功") })
|
自己也可以写出来个这个复制
function mycopy(src,dest){ fs.writeFileSync(dest,fs.readFileSync(src)); } mycopy("1.txt","4.txt");
|
修改文件名
fs.rename("1.txt","5.txt",function (err) { if(err){ console.log(err); }else{ console.log("修改成功"); } });
|
目录操作
创建目录
fs.mkdir("new",err=>{ if(err){ console.log(err); }else{ console.log("修改成功"); } })
|
修改目录名称
fs.rename("new","new2",err=>{ if(err){ console.log(err); }else{ console.log("修改成功"); } })
|
读取目录
目录下面得有东西哦!
fs.readdir("new",(err,data)=>{ if(err){ console.log(err); }else{ console.log(data); } })
|
目录下文件是有后缀的 目录下的目录是没有后缀的
删除目录
条件:必须是空的目录(文件)
fs.rmdir("new",(err)=>{ if(err){ console.log(err); }else{ console.log(data); } })
|
删除非空文件夹
思路先把目录里面的文件删除在删除目录
获取目录下面的所有文件 文件夹
[“33”,”1.txt”,”2.html”] 上面说过 文件会有后缀 文件夹没有后缀
我们不用后缀这个方法 又个更方便的 获取详细信息 里面可以直接判断是文件还是文件夹
是文件就直接删除 文件夹就递归在进去查找
function removeDir(path){ let data = fs.readdirSync(path); for(let i=0;i<data.length;i++){ let url = path + "/" + data[i]; let stat = fs.statSync(url); if(stat.isDirectory()){ removeDir(url); }else{ fs.unlinkSync(url); } } fs.rmdirSync(path); } removeDir("22");
|
文件目录公共方法
判断目录或文件是否存在
fs.exists("new",function (exists) { console.log(exists); })
|
获取目录或者文件的详细信息
获取到详细信息了后就可以进行判断是否是一个 文件或者文件夹等操作
fs.stat("index.html",(err,data)=>{ if(err){ console.log(err); }else{ console.log(data); let res = data.isFile() console.log(res) let res2 = data.isDirectory() console.log(res2) } })
|
buffer
用于表示固定长度的字节序列。
Buffer
类在全局作用域中,因此无需使用 require('buffer').Buffer
。
Buffer
类用于直接处理二进制数据。 它可以使用多种方式构建。
Buffer.alloc(size[, fill[, encoding]])
分配一个大小为 size
字节的新 Buffer
。 如果 fill
为 undefined
,则用零填充 Buffer
。
let buffer = Buffer.alloc(10) console.log(buffer)
|
Buffer.from(array)
使用 0
– 255
范围内的字节数组 array
来分配一个新的 Buffer
。 超出该范围的数组条目会被截断以适合它。
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
|
如果 array
不是一个 Array
或适用于 Buffer.from()
变量的其他类型,则抛出 TypeError
。
Buffer.from(string[, encoding])
创建一个包含 string
的新 Buffer
。
encoding
参数指定用于将 string
转换为字节的字符编码。
const buf1 = Buffer.from('this is a tést'); const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
console.log(buf2.toString());
console.log(buf1.toString('latin1'));
|
Buffer.isBuffer(obj)
如果 obj
是一个 Buffer
,则返回 true
,否则返回 false
。