博客
关于我
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/

    你可能感兴趣的文章
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 源码完全注释(11)ngx_spinlock
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置清单(一篇够用)
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    nginx+php的搭建
    查看>>
    nginx+tomcat+memcached
    查看>>