博客
关于我
Nodejs模块、自定义模块、CommonJs的概念和使用
阅读量:793 次
发布时间:2023-02-16

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

JavaScript 模块化之路:从 CommonJS 到 Node.js 的实践指南

在 JavaScript 的世界里,模块化一直是开发者们需要面对的一个重要课题。传统的 JavaScript 在浏览器环境中运行,虽然功能强大,但缺乏一套统一的标准库,限制了其在更广泛场景下的应用。CommonJS 的出现,为 JavaScript 模块化提供了一种标准化的解决方案,而 Node.js 则将其完美实现,开创了服务器端 JavaScript 应用的新纪元。

CommonJS:模块化的标准

CommonJS 模块化规范的核心目标是弥补 JavaScript 没有标准库的缺陷,为开发者提供一套类似 Python、Ruby 和 Java 的标准库,从而拓宽 JavaScript 的应用范围。与传统的浏览器脚本不同,CommonJS 规范允许 JavaScript 应用在服务器端、命令行工具和桌面图形界面应用中都有稳固的运行基础。

其终极目标是:

  • 提供一套统一的标准库接口
  • 支持多种应用场景:
    • 服务器端 JavaScript 应用程序(如 Node.js)
    • 命令行工具
    • 桌面图形界面应用程序
  • 简单而言,CommonJS 就是模块化的标准,而 Node.js 则是这个标准在 JavaScript 环境中的实现。

    Node.js 中的模块化

    在 Node.js 应用中,模块是构建应用的基本单元,遵循 CommonJS 模块规范。Node.js 提供的模块主要分为两类:

  • 核心模块:如 HTTP 模块、File System 模块、URL 模块等,这些模块在 Node.js 运行时直接加载,路径分析和编译执行环节省略,加载速度极快。
  • 文件模块:由开发者自定义,需要经过完整的路径分析、文件定位和编译执行过程,速度稍慢,但应用广泛。
  • 核心模块与文件模块的区别

    核心模块的优势在于加载速度快,适用于频繁使用的基础功能;而文件模块则更具灵活性,适用于开发者自定义的功能模块。

    自定义模块的规范

    在 Node.js 中,自定义模块的创建遵循以下规范:

  • 模块内部默认是封闭的,只有通过 exports 或 module.exports 暴露的属性和方法才能在外部使用。
  • 需要使用 require() 函数引入模块。
  • 自定义模块的实现示例

    为了更好地理解模块化,我可以通过一个实际案例来说明:

  • 创建一个 module 文件夹,用于存放自定义的公共模块。
  • module 文件夹下新建 tools.js,定义一个用于格式化名字的函数并通过 exports 暴露:
    function formatName(api) {    return "公众号:" + api;}exports.formatName = formatName;
  • 在项目目录下新建 test1.js,引入并使用模块:
    const tools = require('./module/tools.js');var name = tools.formatName('霸道的程序猿');console.log(name);
  • 运行 test1.js
    node test1.js
  • 多方法模块实现

    如果自定义模块需要提供多个功能,可以将其定义为一个包含多个方法的对象,并通过 exports 暴露每个方法:

    var tools = {    sayName: function() {        return "公众号:";    },    sayValue: function() {        return "霸道的程序猿";    }};exports.sayName = tools.sayName;exports.sayValue = tools.sayValue;

    然后在 test2.js 中使用:

    const tools = require('./module/tools');console.log(tools.sayName());console.log(tools.sayValue());

    运行 test2.js

    node test2.js

    模块路径的规范

    在实际项目中,模块路径的规范化至关重要。为了方便管理,可以遵循以下路径规范:

  • 在项目根目录下创建 node_modules 目录。
  • node_modules 下创建自定义模块的文件夹,如 axios
  • 每个模块文件夹下应有一个 index.js 文件,作为模块的入口。
  • 通过这种方式,Node.js 在加载模块时,可以快速定位并加载模块,确保项目结构清晰,维护性强。

    使用 npm 初始化模块

    为了方便管理自定义模块,可以使用 npm 初始化:

    cd module/badaonpm init

    这会在 badao 文件夹下生成一个 package.json 文件,指定模块的入口为 badao.js。这样,其他模块可以通过 require('badao') 引入。

    测试模块加载

    test4.js 中,使用自定义模块 badao

    const badao = require('badao');badao.get();badao.post();

    运行 test4.js

    node test4.js

    通过这些实践,逐步掌握了 Node.js 中的模块化原理和操作方法。理解了模块化的重要性,以及如何规范化地创建和管理自定义模块,为后续的项目开发奠定了坚实的基础。

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

    你可能感兴趣的文章
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 开发websocket 笔记
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    NodeJS 的环境变量: 开发环境vs生产环境
    查看>>
    nodejs 读取xlsx文件内容
    查看>>