Node.js模块化的使用详细介绍

目录
  • 什么是模块化
  • 编程领域中的模块化
  • 模块化规范
  • Node.js中的模块化
  • 加载模块
  • Node.js中的模块作用域
    • 1. 什么是模块作用域
    • 2. 模块作用域的好处
  • 向外共享模块作用域中的成员
    • 1. module对象
    • 2. module.exports对象
  • 共享成员时的注意点
  • exports对象
  • exports和module.exports的使用误区
  • Node.js中的模块化规范

什么是模块化

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。

编程领域中的模块化

编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。

把代码进行模块化拆分的好处:

① 提高了代码的复用性

② 提高了代码的可维护性

③ 可以实现按需加载

模块化规范

模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。

例如:

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么样的语法格式向外暴露成员

模块化规范的好处:大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用,利人利己。

Node.js中的模块化

Node.js 中根据模块来源的不同,将模块分为了 3 大类,分别是:

  • 内置模块(内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
  • 自定义模块(用户创建的每个 .js 文件,都是自定义模块)
  • 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

加载模块

使用强大的 require() 方法,可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。例如:

注意:使用 require() 方法加载其它模块时,会执行被加载模块中的代码。

Node.js中的模块作用域

1. 什么是模块作用域

和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域

2. 模块作用域的好处

防止了全局变量污染的问题

username打印的是:ls

向外共享模块作用域中的成员

1. module对象

在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息,打印如下:

2. module.exports对象

在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。

外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。

// 在一个自定义模块中,默认情况下, module.exports = {}
const age = 20
// 向 module.exports 对象上挂载 username 属性
module.exports.username = 'zs'
// 向 module.exports 对象上挂载 sayHello 方法
module.exports.sayHello = function() {
  console.log('Hello!')
}
module.exports.age = age
// 在外界使用 require 导入一个自定义模块的时候,得到的成员,
// 就是 那个模块中,通过 module.exports 指向的那个对象
const m = require('./11.自定义模块')
console.log(m)

共享成员时的注意点

使用 require() 方法导入模块时,导入的结果,永远以 module.exports 指向的对象为准。

// 在一个自定义模块中,默认情况下, module.exports = {}
const age = 20
// 向 module.exports 对象上挂载 username 属性
module.exports.username = 'zs'
// 向 module.exports 对象上挂载 sayHello 方法
module.exports.sayHello = function() {
  console.log('Hello!')
}
module.exports.age = age
// 让 module.exports 指向一个全新的对象
module.exports = {
  nickname: '小黑',
  sayHi() {
    console.log('Hi!')
  }
}
// 在外界使用 require 导入一个自定义模块的时候,得到的成员,
// 就是 那个模块中,通过 module.exports 指向的那个对象
const m = require('./11.自定义模块')
console.log(m)

exports对象

由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象。默认情况下,exports 和 module.exports 指向同一个对象。最终共享的结果,还是以 module.exports 指向的对象为准。

// console.log(exports)//{}
// console.log(module.exports)//{}
// console.log(exports === module.exports)//true
const username = 'zs'
module.exports.username = username
exports.age = 20
exports.sayHello = function() {
  console.log('大家好!')
}
// 最终,向外共享的结果,永远都是 module.exports 所指向的对象
const m = require('./13.exports对象')
console.log(m)

exports和module.exports的使用误区

时刻谨记,require() 模块时,得到的永远是 module.exports 指向的对象:

注意:为了防止混乱,建议大家不要在同一个模块中同时使用 exports 和 module.exports

Node.js中的模块化规范

Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖。

CommonJS 规定:

① 每个模块内部,module 变量代表当前模块。

② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。

③ 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。

到此这篇关于Nodejs模块化的使用详细介绍的文章就介绍到这了,更多相关Nodejs模块化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 轻松创建nodejs服务器(3):代码模块化

    nodejs的功能块大都以模块的形式存在的. 通常会有一个统一入口index.js,然后调用不同的模块来完成我们需要的功能. 我们先来看看怎么把server.js变成一个模块让 index.js 主文件使用. 复制代码 代码如下: var http = require("http"); ... http.createServer(...); "http" 是nodejs自带的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量. 我们可以用这个变量来调用 htt

  • Node.js中ES6模块化及Promise对象

    目录 ES6模块化 CommonJS 规范 模块化开发好处 模块化规范划分 ES6模块化开发注意点 ES6 导入导出 Promise对象 使用语法 Promise中的同步异步 Promise 封装 第三方then-fs解决回调地狱 ES6模块化 CommonJS 规范 node.js 遵循了 CommonJS 的模块化规范.其中: 导入其它模块使用 require()方法 模块对外共享成员使用 module.exports 对象 模块化开发好处 模块化开发的好处有很多,其中: 实现了在JS文件中

  • Node.js中的模块化,npm包管理器详解

    目录 模块化的基本概念 什么是模块化 模块化拆分的好处 Node.js中的模块化 Node.js中模块的分类 加载模块 模块作用域 向外共享模块作用域中的成员 module对象 exports对象 npm与包 包 如何下载包 在项目中安装包的命令 解决下包速度慢的问题 为什么下包速度慢 解决方法一--淘宝NPM镜像服务器 解决方法二--切换npm的下包镜像源 解决方法三--nrm 总结 模块化的基本概念 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程.对于整个

  • 详解NodeJS模块化

    目录 一.前言 二.正文 2.1.什么是模块 2.2.Resolving 2.3.require.resolve 2.4.模块间的父子依赖关系 2.5.exports, module.exports 2.6.模块循环依赖 2.7..json和.node 2.8.Wrapping 2.9.Cache 三.总结 一.前言 我们知道,Node.js是基于CommonJS规范进行模块化管理的,模块化是面对复杂的业务场景不可或缺的工具,或许你经常使用它,但却从没有系统的了解过,所以今天我们来聊一聊Node

  • 详解Node.js中的模块化方法

    目录 一.模块化的基本概念 1.什么是模块化 2.模块化规范 二.Node.js 中的模块化 1.Node.js 中的模块化分类 2.加载模块 3.向外共享模块作用域中的成员 4.Node.js 中的模块化规范 (1)什么是CommonJS模块规范 (2)CommonJS 模块化规范 (3)每个导出的模块都有一个moudle对象,该对象包含的属性有: 三.npm 与 包 1.包的概念 2.包的安装与卸载 3.包管理配置文件 总结 一.模块化的基本概念 1.什么是模块化 模块化是指解决一个复杂问题

  • node.js中的模块化标准CommonJS与自定义模块

    一. 什么是 CommonJs? JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器. 然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用程序.并没有制定一个用于更广泛的应用程序的标准库. CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷. 它的终极目标就是: 提供一个类似 Python, Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶段.用 CommonJS API 编写出的应用, 不仅可以利

  • Node.js基础入门之使用方式及模块化详解

    目录 什么是Node.js ? Node.js下载 Node.js和JavaScript的区别 Node.js安装与验证 Node.js使用方式 1. REPL模式 2. 文件模式 Node.js模块化 1. 什么是模块? 2. 模块分类 3. 创建自定义模块 4. 调用自定义模块 5. 模块测试 6. 主模块 7. 模块组成 在这个竞争日益激烈的今天,已经不是一门语言,一项技术走天下的时代了.正所谓艺多不压身,今天开始学习Node.js,学而时习之,不亦乐乎,希望可以借鉴经验,学以致用,如有不

  • Node.js的模块化机制和Buffer对象详解

    目录 一.Node.js的模块化机制 1.什么是CommonJS模块规范 2.CommonJS模块规范化的内容 3.每个导出的模块都有一个moudle对象,该对象包含的属性有: 4.使用require导入模块 二.Buffer对象 1.用来弥补JavaScript在二进制数据处理上不足. 2.Buffer是一个构造函数 3.Buffer的基本操作: 4.Buffer类: 总结 一.Node.js的模块化机制 Node应用是由模块组成的,Node遵循了CommonJS的模块规范,来隔离每个模块的作

  • Node.js模块化的使用详细介绍

    目录 什么是模块化 编程领域中的模块化 模块化规范 Node.js中的模块化 加载模块 Node.js中的模块作用域 1. 什么是模块作用域 2. 模块作用域的好处 向外共享模块作用域中的成员 1. module对象 2. module.exports对象 共享成员时的注意点 exports对象 exports和module.exports的使用误区 Node.js中的模块化规范 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程.对于整个系统来说,模块是可组合.

  • Node.js中 __dirname 的使用介绍

    前言 本文主要给大家介绍的是关于Node.js中 __dirname 使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 方法如下 新建个文件 app.js 里面的内容如下: console.log(__dirname + '/example.db'); console.log('example.db'); 如果将app.js放在一个根目录下面 执行node app.js 分别输出如下内容: /Users/durban/nodejs/koa-mysql-orm-model/exa

  • Node.js开源应用框架HapiJS介绍

    一.HapiJS介绍 HapiJS是一个开源的.基于Node.js的应用框架,它适用于构建应用程序和服务,其设计目标是让开发者把精力集中于开发可重用的应用程序的业务逻辑,向开发者提供构建应用程序业务逻辑所需的基础设施.HapiJS目前的最新版本为7.2.0版. 二.HapiJS安装和项目配置 1.安装Hapi库 HapiJS的安装很简单,执行如下命令: 复制代码 代码如下: $ sudo npm install hapi -g hapi@7.2.0 /usr/local/lib/node_mod

  • 使用node.js实现接口步骤详细记录

    1.安装node环境,下载地址:下载 | Node.js 中文网  或者点击这里 2.创建一个文件夹放node项目,如api_event: 3.项目初始化:在新建的文件夹下执行  npm i ,会自动生成package.json文件: 4.安装express:npm i express@4.17.1 5.在项目中新建文件夹index.js来创建服务器,如下所示: // 1.导入express const express = require('express'); // 2.创建服务器的实例对象

  • Node.js 异步编程之 Callback介绍(一)

    Node.js 基于 JavaScript 引擎 v8,是单线程的.Node.js 采用了与通常 Web 上的 JavaScript 异步编程的方式来处理会造成阻塞的I/O操作.在 Node.js 中读取文件.访问数据库.网络请求等等都有可能是异步的.对于 Node.js 新人或者从其他语言背景迁移到 Node.js 上的开发者来说,异步编程是比较痛苦的一部分.本章将由浅入深为大家讲解 Node.js 异步编程的方方面面.从最基础的 callback 到 thunk.Promise.co 直到

  • Node.js和Express简单入门介绍

    仅仅入门如何用Node.js和Express搭建一个web服务器,没有说明太多概念性的东西. 一. Nodejs简介 ​ ==Node是JavaScript语言的服务器运行环境.== ​ 所谓"运行环境"有两层意思:首先,JavaScript语言通过Node在服务器运行,在这个意义上,Node有点像JavaScript虚拟机:其次,Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件.新建子进程),在这个意义上,Node又是JavaScript的工具库. ​

  • 关于Node.js的events.EventEmitter用法介绍

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件. 所有这些产生事件的对象都是 events.EventEmitter 的实例. EventEmitter 类 events 模块只提供了一个对象: events.EventEmitter.EventEmitter 的核心就是事件触发与事件监听器功能的

  • vue.js指令和组件详细介绍及实例

    大家好,本文给各位做一下vue.js一个最基本的概念介绍. vue.js 指令 <div id="app"> <div v-text="message"></div> </div> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) 这个例子我们会得到,v-text所在的div元素的内部插入了'Hello Vue!'这段字符串,那么我们为

  • js中prototype用法详细介绍

    prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!这一点可能听起来会有点乱,别急,下面我便通过实例对这一特殊的方法作已下讲解: 首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类.我们所常见的类包括:数组变量(Array).逻辑变量(Boolean).日期变量(Date).结构变量(Function).数值变量(Number)

  • 可简单避免的三个JS发布错误的详细介绍

    Web应用程序开发是倾向于在客户端运行所有用户逻辑和交互代码,让服务器暴露REST或者RPC接口.编译器是针对JS作为一个平台,第二版 ECMAScript正是考虑到这一点在设计.客户端框架例如Backbone, Ember和Require鼓励创建功能丰富的应用程序,不仅有丰富的代码,而且各个组件,组件与数据之间有很多相互作用.这真的很好,或许还能产生一些优秀的用户体验,但是毫无疑问的是,这是很难开发web应用程序和web页面.根本原因是在互联网上服务你的代码和数据,运行在一些随机的浏览器上,在

随机推荐