Nodejs教程10:Nodejs的模块化

栏目: Node.js · 发布时间: 5年前

内容简介:Nodejs的模块化由于出现的较早,因此它遵循的是CommonJS规范,而非ES6的模块化。在Nodejs的模块化中,最常用到的有module对象、exports对象、require方法。其中module和exports用于输出模块,require用于引用模块。

Nodejs的模块化由于出现的较早,因此它遵循的是CommonJS规范,而非ES6的模块化。

在Nodejs的模块化中,最常用到的有module对象、exports对象、require方法。

其中module和exports用于输出模块,require用于引用模块。

一个简单的模块例子

示例代码:/lesson10/module1.js、/lesson10/require.js

先新建一个module1.js文件,代码如下:

module.exports.a = 1
module.exports.b = 2

let c = 3
复制代码

在require.js中,引入模块并打印:

const module1 = require('./module1')

console.log(module1)
复制代码

可以看到打印结果:{ a: 1, b: 2 }。

这段代码的含义如下:

  1. module1.js对外输出了module.exports,module.exports为一个对象,它含有a和b属性。
  2. module1.js中虽然定义了变量c,但它只在module1.js这个模块中存在,从外部无法访问。
  3. 在require.js中引用module1.js,必须使用相对路径或绝对路径。
  4. 若引用时不带路径,而是直接使用模块名称,则会默认引用项目目录下的node_modules文件夹下的模块,如:
const module2 = require('module2')

console.log(module2)  // { a: 1, b: 2 }
复制代码

若此时项目目录下的node_modules文件夹下存在module2.js文件,则会引用该文件。

若不存在,则会查找系统的node_modules文件夹下,即全局安装的模块,是否存在module2。

若还不存在该模块,则会报错。

通过require导入的模块,可以被任意命名,因此写成const a = require('module2')也是可以的。

module.exports

上面这个例子中的模块导出,还可以省略module,直接写成exports.a = 1; exports.b = 1; ...。

但直接使用exports导出,也仅支持这种写法,若写成:

exports = {
  a: 1,
  b: 2
}

复制代码

在引用模块时,只能接收到{},也就是说exports只支持exports.a = 1;这样的语法。

如果要将整个模块直接定义为一个对象、函数、变量、类,则需要使用module.exports = 123。

如下:

示例代码:/lesson10/module3.js

module.exports = {
  a: 1,
  b: 2
}

module.exports = 123

module.exports = {
  a: 1,
  b: 2,
  c: 3
}

module.exports = function () {
  console.log('test')
}

module.exports = class {
  constructor(name) {
    this.name = name
  }

  show() {
    console.log(`Show ${this.name}`)
  }
}
复制代码

module.exports可以让模块被赋值成任意类型,但需要注意的是此时module.exports类似于一个模块内的全局变量。

对它的重复赋值,只有最后的值有效,之前的值会直接被覆盖。

在这个例子中,module3.js模块最终导出为一个类。

因此,通常推荐使用module.exports,可以避免出错。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python网络编程(第3版)

Python网络编程(第3版)

[美] Brandon Rhodes、[美] John Goerzen / 诸豪文 / 人民邮电出版社 / 2016-9 / 79.00元

本书针对想要深入理解使用Python来解决网络相关问题或是构建网络应用程序的技术人员,结合实例讲解了网络协议、网络数据及错误、电子邮件、服务器架构和HTTP及Web应用程序等经典话题。具体内容包括:全面介绍Python3中最新提供的SSL支持,异步I/O循环的编写,用Flask框架在Python代码中配置URL,跨站脚本以及跨站请求伪造攻击网站的原理及保护方法,等等。一起来看看 《Python网络编程(第3版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具