Loading

NodeJS模块化

Node.js模块化开发

JavaScript开发弊端

JavaScript在使用时存在两大问题,文件冲突和命名冲突。

软件中的模块化开发

一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行

Node.js中模块化开发规范

Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到。

模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块。

模块成员导出和导入

导出:

// a.js
// 模块内部定义变量
let version = 1.0;
// 模块内部定义方法
const sayHi = name => `您好,{name}`;
// 向模块外部导出数据
exports.version = version;
exports.sayHi = sayHi;

导入:

//b.js
//在b.js模块中导入模块a
let a = require('./a.js'); //可以省略文件后缀名
//输出b模块中的version变量
console.log(a.version);
//调用b模块中的sayHi方法 并输出其返回值
console.log(a.sayHi('哒哒哒'))

注意:在使用 require 加载用户自定义模块时,可以省略文件后缀名。

  • let a = require('./a')

示例:

a.js:

const add = (n1, n2) => n1 + n2

exports.add = add;

b.js:

const a = require('./03.module-a.js')

console.log(a.add(10, 20))

另一种模块成员导出的方式

module.exports.version = version;
module.exports.sayHi = sayHi;

或者:

module.exports = {version, sayHi}

exportsmodule.exports的别名,导出对象最终以module.exports为准

系统模块

什么是系统模块

Node运行环境提供的API都是以模块化的方式进行开发的,所以我们又称Node运行环境提供的API为系统模块(内置模块)。

例如:fs、path、http等模块。

系统模块fs文件操作

const fs = require('fs')

读取文件内容

fs.readFile('文件路径/文件名称'[,'文件编码'], callback)

示例:

const fs = require('fs')

fs.readFile('./03.module-a.js', 'utf-8',(err,doc)=>{
    //如果文件读取出错 err是一个对象包含错误信息
    //如果文件读取正确 err是null
    //doc是文件读取的结果
    console.log(err)
    console.log(doc)
})

写入文件内容

fs.writeFile('文件路径/文件名称', '数据', callback)

示例:

const fs = require('fs')

fs.writeFile('./demo.txt', '要写入的内容', err => {
    if (err != null) {
        console.log(err);
        return;
    }
    console.log('文件内容写入成功')
})

系统模块path路径操作

路径拼接语法

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

示例:

const path = require('path')
const filePath = path.join('pubic','uploads','avatar')
console.log(filePath) // pubic\uploads\avatar

第三方模块

什么是第三方模块

别人写好的,具有特定功能的,我们能直接使用的模块即第三方模块。

第三方模块有两种存在方式:

  • 以js文件的形式存在,提供实现项目具体功能的API接口。
  • 以命令行工具形式存在,辅助项目开发。

获取第三方模块

https://www.npmjs.com:第三方模块的存储和分发仓库

npm(node package manager):node的第三方模块管理工具,不需要下载,集成在Nodejs中

查看npm版本:npm -v

下载第三方模块:npm install 模块名称

第三方模块 nodemon

nodemon是一个命令行工具,用以辅助项目开发。

在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。

使用步骤:

  • 1.安装:npm install nodemon -g

    -g:代表全局安装

  • 2.在命令行工具中用nodemon命令替代node命令执行文件

查看使用帮助:

nodemon -h

Node.js模块的加载机制

模块查找规则-当模块拥有路径但没有后缀时

require('./find.js');
require('./find');

1.require方法根据模块路径查找模块,如果是完整路径,直接引入模块

2.如果模块后缀省略,先找同名js文件再找同名js文件夹

3.如果找到了同名文件夹,再找同名文件夹中的index.js文件

4.如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件

5.如果指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到

模块查找规则-当模块没有路径且没有后缀时

require('find')

1.Node.js会假设它是系统模块

2.Node.js会去node_modules文件夹中查找

3.首先看是否有该名字的js文件

4.再看是否有该名字的文件夹

5.如果是文件夹看里面是否有index.js

6.如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件

posted @ 2022-03-17 14:30  charlatte  阅读(99)  评论(0编辑  收藏  举报