Node.js 入门教程 14 使用 exports 从 Node.js 文件中公开功能

Node.js 入门教程

Node.js官方入门教程

Node.js中文网

本文仅用于学习记录,不存在任何商业用途,如侵删

14 使用 exports 从 Node.js 文件中公开功能

Node.js 具有内置的模块系统。

Node.js 文件可以导入其他 Node.js 文件公开的功能。

当想要导入某些东西时,使用

const library = require('./library')

当然这是CommonJS的用法

可以导入存在于当前文件夹中的 library.js 文件中公开的功能。

在此文件中,必须先公开功能,然后其他文件才能将其导入。

默认情况下,文件中定义的任何其他对象或变量都是私有的,不会公开给外界。

这就是 module 系统提供的 module.exports API 可以做的事。

在这里插入图片描述

当将对象或函数赋值为新的 exports 属性时,这就是要被公开的内容,因此,可以将其导入应用程序的其他部分或其他应用程序中。

可以通过两种方式进行操作。

【1】第一种方式是将对象赋值给 module.exports(这是模块系统提供的对象),这会使文件只导出该对象:

const car = {
  brand: 'Ford',
  model: 'Fiesta'
}


module.exports = car


//在另一个文件中


const car = require('./car')

在这里插入图片描述

这是 CommonJS的模块加载方式。

【2】第二种方式是将要导出的对象添加为 exports 的属性。这种方式可以导出多个对象、函数或数据:

const car = {
  brand: 'Ford',
  model: 'Fiesta'
}


exports.car = car

在这里插入图片描述

或直接

exports.car = {
  brand: 'Ford',
  model: 'Fiesta'
}

在这里插入图片描述

在另一个文件中,则通过引用导入的属性来使用它:

const items = require('./items')
items.car

或者

const car = require('./items').car

在这里插入图片描述

module.exports 【对象】和 export 【属性】之间有什么区别?

前者公开了它指向的对象。 后者公开了它指向的对象的属性。

这里笔者补充一点吧【这是ES入门中阮一峰老师的解释】

JavaScript 现在有两种模块。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS。

CommonJS 模块是 Node.js 专用的,与 ES6 模块不兼容。语法上面,两者最明显的差异是,CommonJS 模块使用require()module.exports,ES6 模块使用importexport

它们采用不同的加载方案。从 Node.js v13.2 版本开始,Node.js 已经默认打开了 ES6 模块支持。

Node.js 要求 ES6 模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用import或者export命令,那么就必须采用.mjs后缀名。Node.js 遇到.mjs文件,就认为它是 ES6 模块,默认启用严格模式,不必在每个模块文件顶部指定"use strict"

如果不希望将后缀名改成.mjs,可以在项目的package.json文件中,指定type字段为module

{
   "type": "module"
}

一旦设置了以后,该项目的 JS 脚本,就被解释成 ES6 模块。

# 解释成 ES6 模块
$ node my-app.js

如果这时还要使用 CommonJS 模块,那么需要将 CommonJS 脚本的后缀名都改成.cjs。如果没有type字段,或者type字段为commonjs,则.js脚本会被解释成 CommonJS 模块。

总结为一句话:.mjs文件总是以 ES6 模块加载,.cjs文件总是以 CommonJS 模块加载,.js文件的加载取决于package.json里面type字段的设置。

注意,ES6 模块与 CommonJS 模块尽量不要混用。require命令不能加载.mjs文件,会报错,只有import命令才可以加载.mjs文件。反过来,.mjs文件里面也不能使用require命令,必须使用import

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一份简要的 Node.js 教程: 1. 安装 Node.js:访问 Node.js 官网,下载并安装对应操作系统版本的 Node.js。 2. 简单的 Node.js 程序: ```javascript // hello.js console.log("Hello, world!"); ``` 在命令行执行 `node hello.js`,将输出 `Hello, world!`。 3. Node.js 核心模块:Node.js 提供了一些核心模块,包括 fs、http、path、process 等。这些模块可以直接在程序使用,无需安装。 4. Node.js 模块化:Node.js 支持模块化开发,通过 `require` 来引入模块,通过 `module.exports` 来导出模块。 ```javascript // add.js function add(a, b) { return a + b; } module.exports = add; ``` ```javascript // main.js const add = require('./add.js'); console.log(add(1, 2)); // 输出 3 ``` 5. Node.js 异步编程:Node.js 的异步编程模型可以提高程序的性能和吞吐量。Node.js 的异步编程主要通过回调函数、事件和 Promise 实现。 ```javascript // 回调函数 const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); }); ``` ```javascript // 事件 const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log('an event occurred!'); }); myEmitter.emit('event'); ``` ```javascript // Promise const fs = require('fs').promises; fs.readFile('file.txt', 'utf8') .then((data) => { console.log(data); }) .catch((err) => { console.error(err); }); ``` 6. Node.js Web 开发:Node.js 也可以用于 Web 开发,常见的 Web 框架包括 Express、Koa、Hapi 等。 ```javascript // Express 示例 const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello, world!'); }); app.listen(3000, () => { console.log('Example app listening on port 3000!'); }); ``` 7. Node.js 数据库:Node.js 支持多种数据库,包括 MySQL、MongoDB、Redis 等。使用第三方模块来操作数据库。 ```javascript // MySQL 示例 const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test', }); connection.connect(); connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; console.log(results); }); connection.end(); ``` 8. Node.js 单元测试:使用单元测试可以保证程序的质量和稳定性。常见的 Node.js 单元测试框架包括 Mocha、Jest、AVA 等。 ```javascript // Mocha 示例 const assert = require('assert'); describe('Array', () => { describe('#indexOf()', () => { it('should return -1 when the value is not present', () => { assert.strictEqual([1, 2, 3].indexOf(4), -1); }); }); }); ``` 以上是一个简要的 Node.js 教程,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ding Jiaxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值