博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node.js当中模块化开发的基本流程及require加载文件的规则
阅读量:6483 次
发布时间:2019-06-23

本文共 1476 字,大约阅读时间需要 4 分钟。

一、模块的分类

1、文件模块

即自己写的功能模块文件,一个js文件即代表一个自定义的文件模块。

const calc = require('./modules/calculator.js');
2、核心模块

Node平台自带一套基本的功能模块,也有人称之为Node平台的API。

const path = require('path');const fs = require('fs');
3、第三方模块

社区或第三方开发的功能模块,这种模块在Node本身没有,需要通过NPM的方式下载之后再引入。比如要操作mysql数据库,则需要引入mysql这个模块。

const express = require('express');

二、模块化开发的基本流程

1、创建模块

即创建一个js文件,因为一个模块通常对应着一个js文件。可以在该文件当中封装几个内部函数,如下所示。

Node采用的模块化结构遵循CommonJS规范。模块与文件是一一对应的,加载一个模块实际上就是加载一个js模块文件。

图片描述

2、导出模块成员

在模块文件内部用module.exports = {};来导出成员。如下所示。

图片描述

可以使用ES6当中的“自动属性”的语法,则上述导出成员的代码可以用 module.exports = {add,subtract};来代替。在调用时,使用“模块名.add”即代表这个模块文件当中的add这个属性值所对应函数。

3、载入模块

使用相对路径,用require的方式来载入在自定义的模块文件。

图片描述

4、使用模块

图片描述

三、require加载文件的规则

1、当require当中的参数字符串以./(从当前目录出发)或../(从上一级目录出发)开头:表示按照相对路径,从当前文件所在的文件夹开始寻找要载入的模块文件。

图片描述

2、当require当中的参数字符串以/开头:则表示从系统根目录开始寻找该模块文件。

3、如果参数字符串不以.//../开头,说明要加载的不是一个文件,而是一个默认提供的核心模块。此时则先在node平台所提供的核心模块当中找,然后再寻找NPM模块(即第三方模块包,或自己写的模块包)。在寻找NPM模块包时,会从当前目录出发,向上搜索各级当中的node_modules文件夹当中的文件,但若有两个同名文件,则遵循就近原则。

1、node的系统模块的优先级最高,一旦有第三方模块包与系统模块重名,则以系统模块为准。

2、之前在使用require的方式来加载一个文件时,如果该文件在当前目录当中,则参数字符串当中必须以./开头,不能直接写文件名。若在参数字符串当中直接写文件名,则代表载入的是一个模块包,模块包必须放在一个特定名字的文件夹当中,即node_modules

4、使用require来加载文件时可以省略扩展名。比如require('./module'),则对应的加载顺序为,

  1. 按js文件来执行(先找对应路径当中的module.js文件来加载)
  2. 按json文件来解析(若上面的js文件找不到时,则找对应路径当中的module.json文件来加载)
  3. 按照预编译好的c++模块来执行(寻找对应路径当中的module.node文件来加载)
  4. 若参数字符串为一个目录(文件夹)的路径,则自动先查找该文件夹下的package.json文件,然后再再加载该文件当中main字段所指定的入口文件。(若package.json文件当中没有main字段,或者根本没有package.json文件,则再默认查找该文件夹下的index.js文件作为模块来载入。)

图片描述

图片描述

转载地址:http://abbuo.baihongyu.com/

你可能感兴趣的文章
Immutable学习及 React 中的实践
查看>>
【转】性能测试步骤
查看>>
OSI与TCP/IP各层的结构与功能,都有哪些协议
查看>>
Android实例-程序切换到后台及从后台切换到前台
查看>>
spring boot启动定时任务
查看>>
算法 (二分查找算法)
查看>>
java Date 当天时间戳处理
查看>>
Python~迭代
查看>>
linux常用命令-关机、重启
查看>>
iOS开发之调用系统设置
查看>>
初次使用 VUX
查看>>
javascript 字符串转数字的简便写法
查看>>
html之div始终停留在屏幕中间部分
查看>>
Spring中jdbcTemplate的用户实例
查看>>
DecimalFormat 数据格式设置 SimpleDateFormat时间格式的用法介绍 --转载
查看>>
Android 的Margin和Padding属性以及支持的长度单位
查看>>
HDU ACM 1050 Moving Tables
查看>>
Django templates加载css/js/image等静态资源
查看>>
Eclipse C + GTK2.0环境构筑
查看>>
caffe solver
查看>>