Node.js(一)模块化开发

模块化开发是为了解决js文件中命名冲突文件依赖的问题。

软件中的模块化开发:

一个功能就是一个模板,多个模板可以组成完整应用,抽离一个模块不会影响到其他功能的应用。
例如:
一个应用模块分为用户管理模块,文章管理模块,商品管理模块,用户管理模块又分为添加用户管理模块和删除用户管理模块,商品管理模块分为查找和添加模块。各模块之间相互独立,可维护性较强。
Node.js(一)模块化开发

Node.js中模块化开发规范

Node.js规定一个js文件为一个模块,模块内部定义的函数和变量在模块外部无法访问,因此需要在模块内部通过exports对象进行导出,在模块外部通过require方法进行导入。
(注意:exports是一个对象,require是一个方法!!!)

exports对象导出方法

例如:a.js文件中代码为

const version=1;
const hello = name =>`hello,${name}`;

exports.version=version;
exports.hello=hello;

b.js文件中代码为:

let b=require('./a.js'); 
//在外部通过reqiure进行导入,require为一个方法
console.log(b.version);
console.log(b.hello('lala'));

最终通过powershell运行结果为:
Node.js(一)模块化开发

module.exports对象导出方法

用module.exports对象也可以导出模块。
在上述事例中将a.js文件的代码改为:

const version=1;
const hello = name =>`hello,${name}`;

module.exports.version=version;
module.exports.hello=hello;
两者的区别

exports是module.exports的别名,两者指向同一对象同一地址,若两者不同,最终导出对象以module.exports为准。
例如:
a.js的代码为

const version=1;
const hello = name =>`hello,${name}`;

exports.version=version;
exports.hello=hello;
//exports指向的对象是带有version和hello属性的对象

module.exports={
    name:"zhangsan"
}
//module.exports指向的对象是带有name属性的对象

b.js的代码为

let b=require('./a.js');
console.log(b);

最终结果为
命令行中调用时应为:node 文件名称
Node.js(一)模块化开发

系统模块

系统模块指的是node运行环境提供的API,因为这些API都是用模块化的方式开发的,于是称为系统模块。

fs:文件操作系统模块

导入模块:

const fs=require('fs');

读取文件内容:
Node.js(一)模块化开发
例如:

//读取上一级css目录中的base.css文件
//文件编码是可选参数
fs.readFile('../css/base.css','utf-8',(err,doc)=>{
     //err为读取过程中的错误信息,doc为文件内容
     if(err==null){
     console.log(doc);
     }
});

写入文件内容:(会覆盖之前的内容)
Node.js(一)模块化开发
例如:

fs.writeFile('./a.js', 'content', (err) => {
    if(err==null){
        console.log('文件写入成功');
    }
    else{
        console.log('文件写入失败,'+err);
    }
});

追加文件内容:(不会覆盖之前的)

//添加一个flag为a的参数则为追加,flag为w时则为写入
fs.writeFile('./a.js', 'content',{'flag':'a'}, (err) => {
    if(err==null){
        console.log('文件追加成功');
    }
    else{
        console.log('文件追加失败,'+err);
    }
});

path:路径操作系统模块

路径拼接

不同操作系统中路径分隔符不同,path系统模块可通过分析电脑的操作系统选择合适的路径分隔符,并对路径进行拼接。

路径拼接语法:

path.join('路径','路径',...)

例如:

//引入path系统模块
const path=require('path');

const finalPath=path.join('public','uploads','avatar');
console.log(finalPath);
绝对路径和相对路径

写文件路径时最好使用绝对路径,这样文件移动时仍然能对文件进行操作。
例如:
__dirname表示当前文件所在的绝对路径

const fs=require('fs');
const path=require('path');

console.log(__dirname);
console.log(path.join(__dirname,'a.js'));

fs.readFile(path.join(__dirname,'a.js'),'utf-8',(err,doc)=>{
    if(err==null){
        console.log(doc);
    }
    console.log(err);
});

第三方模块

第三方模块是别人写好的,具有特定功能的模块,又名包。

第三方模块获取方式

第三方模块下载方式分为命令行下载网站下载

网站下载:
国内网站地址(速度较快):点此下载

命令行下载:
用npm(第三方模块管理工具)以命令行方式下载第三方模块:

下载地址默认为命令行当前位置。
安装方式分为本地安装和全局安装(本地安装多指在网站上下载第三方模块,全局安装多指在命令行中下载)。

npm install 模块名称

卸载第三方模块

npm uninstall 模块名称

nodemon第三方模块

nodemon可以帮助在文件保存时自动运行文件,较为方便。

安装命令

npm install nodemon -g    //-g表示全局安装

运行文件命令:

nodemon 文件名称

ctrl+c 退出当前监控环境。

nrm第三方模块

nrm: npm下载地址切换工具

使用步骤:

  1. 使用npm install nrm -g对其进行下载。
    Node.js(一)模块化开发
  2. 查询可用下载地址列表 nrm ls
    *表示当前下载地址Node.js(一)模块化开发
  3. 对其进行切换 nrm use 下载地址名称
    Node.js(一)模块化开发
    最终完成对npm下载地址的切换。
Node.js(一)模块化开发Node.js(一)模块化开发 qq_42272508 发布了3 篇原创文章 · 获赞 0 · 访问量 46 私信 关注
上一篇:Node.js学习笔记(三) 模块系统


下一篇:271 Node.js模块化开发:,,,,