当前位置: 首页 > news >正文

【Node】【6】模块系统

Node.js的模块系统基于CommonJS规范,其中每个文件被视为一个独立的模块,可以通过require函数引入其他模块,也可以通过module.exports将模块的功能暴露给外部。

CommonJS规范:使用 require() 函数来导入模块,使用 module.exports 或 exports 对象来导出模块。
ES Modules: 使用 import 和 export 关键字进行模块导入和导出。

【面试题】在低版本的 node 中想使用 es module 该如何做?【Nodejs】【出题公司: 腾讯】

  1. 低于Node 12 如何使用ES Modules:

    • 文件扩展名:在文件名后缀为 .mjs 的文件中使用 ES Modules。
    • package.json 配置:在 package.json 文件中添加 "type": "module"
    • 导入和导出:使用 importexport 语法。
    • 动态导入:动态导入可能不受支持。

    以下是一个示例:

    • 创建一个 app.mjs 文件:扩展文件格式

      // app.mjs
      import http from 'http';const server = http.createServer((req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Hello World\\n');
      });const PORT = 3000;server.listen(PORT, () => {console.log(`Server running at <http://localhost>:${PORT}/`);
      });
    • 修改 package.json 文件:

      {"type": "module", // 重点"scripts": {"start": "node --experimental-modules app.mjs"}
      }
    • 使用 -experimental-modules 标志运行应用程序:

      node --experimental-modules app.mjs
  2. 从 Node.js 12 开始,官方提供了对 ES Modules 的本机支持,无需额外配置即可使用 ES Modules。

module.exports 和 exports

//hello.js

exports.greet = function() {console.log('Hello World');
}
  • 这种方式是在 exports 对象上添加属性或方法,可以导出多个方法或属性。
  • 当引入这个模块时,返回的是 exports 对象,可以通过属性访问导出的方法或属性。
  • exports 则更适合在导出多个属性或方法时使用

//main.js


var Hello = require('./hello');console.log(typeof Hello); //object exports对象// let hello = new Hello();
Hello.greet();

//hello.js


// 导出一个构造函数 Hello
function Hello() {this.greet = function() {console.log('Hello, world!');};
}module.exports = Hello;
  • 这种方式将整个模块(module.exports)替换为一个构造函数或对象。当引入这个模块时,返回的是整个构造函数(Hello)或对象。 不再是exports对象
  • 可以通过 new 关键字实例化 Hello,然后调用其方法。
  • 这种方式更加常用。可以导出对象。

//main.js

var Hello = require('./hello');console.log(typeof Hello); //functionlet hello = new Hello();
hello.greet();

模块导入

var http = require("http");// 内置模块
var express = require("express"); //第三方模块,通过npm安装和引入
var Hello = require('./hello');   // 文件模块 绝对路径和相对路径引入

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python从入门到精通:异常操作、模块操作及包操作
  • Windows Docker 部署 Nginx 服务器
  • 初识QT:从创建到认识
  • Grove Vision AI V2之语音控制LED
  • python如何用pymodbus库进行modbus tcp通信解析
  • IO进程线程 240826作业
  • Graylog日志丢失解决方案
  • 人眼检测(单张图像)
  • 工作实战-项目压测记录
  • 如何使用cornerstone3D渲染3D影像
  • WEB应用服务器TOMCAT知识点
  • 8.26算法训练
  • 黑悟空!一区预定!原创首发!SLWCHOA-Transformer-LSTM混合改进策略的黑猩猩优化算法多变量时间序列预测
  • js中Map数据结构使用详细讲解
  • MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值
  • 收藏网友的 源程序下载网
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 「译」Node.js Streams 基础
  • 【css3】浏览器内核及其兼容性
  • Apache Spark Streaming 使用实例
  • Codepen 每日精选(2018-3-25)
  • javascript 哈希表
  • Java读取Properties文件的六种方法
  • JDK9: 集成 Jshell 和 Maven 项目.
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Promise面试题,控制异步流程
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vuex 学习笔记 01
  • webpack+react项目初体验——记录我的webpack环境配置
  • windows下mongoDB的环境配置
  • 工程优化暨babel升级小记
  • 基于遗传算法的优化问题求解
  • 普通函数和构造函数的区别
  • 为视图添加丝滑的水波纹
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 怎么把视频里的音乐提取出来
  • Java数据解析之JSON
  • ​linux启动进程的方式
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #、%和$符号在OGNL表达式中经常出现
  • #include
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (11)MSP430F5529 定时器B
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二十六)Java 数据结构
  • (六)Flink 窗口计算
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • ****三次握手和四次挥手
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .Net Core 微服务之Consul(二)-集群搭建