模块化开发
它能解决JavaScript的弊端,JavaScript在使用的时候存在两大问题,文件依赖和命名冲突
文件依赖举例来说,你想要引用一个js文件,但发现没效果,一顿分析后发现,这个js文件又引了另一个js文件,以此继续套娃。过程太繁琐了,会有想辞职的冲动!
命名冲突会导致代码覆盖的问题。、
模块化开发中一个功能就是一个模块,多个模块可以组成完整的应用,抽离一个模块不会影响其他功能运行。
模块化开发规范
Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到。
模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。
举个加法的例子:
创建一个A模块(a.js)
这里先定义了一个加法,通过exports.属性名=属性值 进行导出
const add =(a,b)=>a+b;
exports.add=add;
创建B模块(b.js)用require方法对依赖模块进行导入,tips:这里文件后缀是可以省略的
const a=require('./a')
console.log(a.add(10,20));
导出还有另一种方式
//a.js
const app = fuck => `Hello ${fuck}`;//此处看不懂就去学es6,`${xxx}`是模板字符串
module.exports.app=app
const app=require('./a');
console.log(app.app('dongson'));
//b.js
exports和module.exports看似没有区别但实际上module.exports是可以重新赋值而exports不能重新赋值,此时输出会变成{name:'HandsomeRider},exports和module.exports指向不同对象,无论如何都以module.exports为准。
const app = fuck => `Hello ${fuck}`;
module.exports.app={
name:'HandsomeRider!'
}
系统模块
系统模块就是Node运行环境提供的API,因为这些API都是以模块化的方式进行开发的,也可称Node运行环境提供的API为系统模块
系统模块fs文件操作
f:file文件,s:system系统,文件操作系统
引用方式
const fs =require('fs')
读取文件内容
fs.readFile('文件路径/名称‘,‘文件编码’,(callback)={}
示例
const fs=require('fs');
fs.readFile('./input.txt','utf8',(err,doc)=>{
if(err==null){
console.log(doc);
}
})
写入文件内容
fs.writeFile('文件路径/文件名称','数据',callback);
fs.writeFi