博客
关于我
Nodejs模块、自定义模块、CommonJs的概念和使用
阅读量:794 次
发布时间: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/

    你可能感兴趣的文章
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>
    NLP学习笔记:使用 Python 进行NLTK
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>