Node.js — 模块化

2023-05-16

文章目录

  • 1.模块化
    • 1.模块化与作用域
    • 2. module 模块
    • 3.npm与包

1.模块化

1.模块化与作用域

  1. 编程领域中的模块化:遵守固定的规则,把一个大文件拆成独立并相互依赖的多个小模块。
  2. 模块化好处:提高代码复用性,可维护性和按需加载
  3. 模块化语法规范CommonJSrequire 引用模块 与 module.exports向外暴露成员
    1. CommonJS规范了: 模块的特性 以及 各模块之间如何相互依赖
    2. module 变量代表当前模块,是一个对象,其exports属性是对外接口,需要require( )方法加载该属性
  4. Node.js 的 模块分类:内置模块(fs,path,http,由官方提供),自定义模块(用户创建的每个js文件),第三方模块(由第三方开发,非官方提供,使用前需要下载)
  5. 执行模块:通过 require( ) 方法(会自动补全 js 后缀)可以加载使用模块,执行被加载模块中的代码
  6. 模块作用域:与和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域(防止了全局变量污染的问题)

2. module 模块

  1. 相关属性:module.path [ 文件的相对路径 ] ; .filename:[文件路径内的完整名称]; .exports:[ 指向空对象 ](可以通过其向外共享成员)
  2. module.exports 对象:将模块内的成员共享出去,供外界使用,外界使用 require 方法导入自定义模块时,得到的就是 module.exports 所指向对象
  3. 默认 exports 和 module.exports 指向同一个对象,最终共享的结果,还是以 module.exports 指向的结果为准
  4. 防止混乱尽量不要在同一个模块中使用 exports 和 module.exports

3.npm与包

  1. 包:又叫第三地方模块

  2. 包的来源:由第三方个人或团队开发,供人免费试用

  3. 包的作用:基于内置模块封装而成,提供了更高级,更方便的API,提高开发效率。

  4. 包与内置模块的关系类似于jQuery 与 浏览器内置API 之间的关系

  5. npm i moment 安装成功后会多一个 node_modules 文件夹【存放所有已安装到项目的包,require 从该目录查找并导入加载包】和两个 js 文件(package - lock.json【记录上面文件夹的目录下的每一个包的下载信息】和package,json),注意,不要手动修改以上任何代码,npm包管理工具会自动维护。

  6. package.json 【包管理配置文件,用来记录与项目有关的一些配置信息】,必须包含在项目根目录中。
    1.包含的配置信息:

     	1. 项目的名称,版本号,描述, 
     	2. 项目中用到那些包
     	3. 那些包只在开发期间会用到
     	4. 那些包在开发和部署时都需要用到
    
  7. 包的语义化规范:版本号以‘’点分十进制‘’定义,总共三位数字,例2.24.0.
    1.第1位:大版本,第2位:功能版本,第3位:Bug修复版本
    2.版本号提升,后面全部归零

  8. 多人项目开发不需要上传node_module 文件夹到github,将其添加到.gitignore忽略文件中,而可以创建 package.json 用来记录项目中安装的包,方便团队成员共享项目源代码。

    1. 新建package.json文件快捷键:npm init -y 【只能在 英文 或 无空格 目录运行,运行npm install 命令安装包,npm自动将包名称等信息记录其中】,其中必须包含 name,version 以及 main属性
    2. dependencies 节点 [ 核心依赖包 ]【存放在项目开发以及上线后均会用到的包】 用来记录使用npm i 命令安装了哪些包,方便误删 node_module 后重新安装所有依赖包
    3. 卸载依赖包:命令 npm uninstall + 包的名称
    4. devDependencies 节点 [开发依赖包] :存放只在项目开发阶段而项目上线后不会用到的包,使用 npm i 包名 -D 【是 npm i --save-dev 包名 的缩写】快捷命令将指定包安装 其中
  9. 【扩展】镜像:一种文件存储形式。一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本。例如·:淘宝NPM镜像服务器(解决下包速度慢的问题)

    1. 下包镜像源:下包的服务器地址。 检查下包镜像源命令·: npm config set registry
    2. 切换为淘宝镜像源命令: npm config set registry=https://registry.npm.taobao.org/
    3. nrm : 方便查看和切换 包镜像源 。安装 npm i nrm -g,查看所有镜像源 nrm ls ,下包镜像源切换nrm use taobao
  10. 包的分类:开发依赖包和核心依赖包。

    1. 全局包:提供 -g 参数,
npm i包名-g //全局安装指定的包
npm uninstall 包名-g//卸载全局安装的包
	2.`i5ting_toc`:  一个吧md文档转为html页面的工具 
//将i5ting_toc安装为全局包
npm install -g i5ting_toc
//调用,轻松实现md转换为html的功能
i5ting_toc -f 要转换的md文件路径 -o
  1. 开发自己的包:
    1.初始化 package.json ,必备属性:

    1. name :包名,需要具备唯一性
    2. version:包版本号
    3. main : 外界默认入口文件
    4. description:包的简短信息
    5. keywords,搜索关键字
    6. license :默认许可协议,ISC
    
    1. 开发属于自己的包
      1.需要实现的功能
      格式化日期
      转义Html中的特殊字符
      还原html中的特殊字符
    2. 发布 npm publish 包名,删除npm unpublish 包名 --froce
  2. 模块的加载机制:

1. 优先从缓存中加载 

模块在第一次被加载后会被缓存。这也意味着多次调用 require() 不会导致模块的代码被多次执行。注意:不论是内置模块,自定义模块,还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

2. 内置模块的加载机制

内置模块加载优先级最高。

3. 自定义模块的加载机制

使用require()加载自定义模块时,必须指定以./或…/开头的路径标识符。在加载自定义模块时,如果没有指定的话,则node模块就会把他当成内置模块或者第三方模块进行加载
同时,在使用require()导入自定义模块时,如果省略了文件的拓展名,则node.js就会按顺序分别尝试加载以下的文件
1.按照确切的文件名进行加载
2.补全.js拓展名进行加载
3.补全.json拓展名进行加载
4.补全.node拓展名进行加载
5.加载失败,终端报错

4. 第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有./等等开题,则Node.js会从当前模块的父目录开始,尝试从.node_modules文件夹中加载第三方模块。如果没有找到第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js — 模块化 的相关文章

  • Centos7部署Vue项目

    一 安装docker 1 安装依赖包 sudo yum install y yum utils device mapper persistent data lvm2 2 设置阿里云镜像源 sudo yum config manager ad
  • node koa发送邮箱验证码

    1 注册一个邮箱 开启POP3 SMTP IMAP 下方代码内的auth pass 下图授权码 2 nodejs koa发送邮箱验证码 const nodemailer require nodemailer const userEmail
  • 解决:Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\辰之星\AppData\Roaming\npm\node_modules\n

    解决 Error ERR REQUIRE ESM require of ES Module C Users 辰之星 AppData Roaming npm node modules nrm node modules open index j
  • yarn 2+以上版本的安装和使用方法

    一 安装 1 安装核心包 管理 Yarn 的首选方法是通过Corepack 这是从 16 10 开始随所有 Node js 版本一起提供的新二进制文件 它充当你和 Yarn 之间的中介 让你可以在多个项目中使用不同的包管理器版本 而无需再签
  • npm离线安装全局包,内网安装npm中的包

    我是刚学习基于node环境下开发angularjs2 遇到内网环境下发布应用的问题 因为我是基于angular cli平台开发的 我的内网环境需要安装angular cli 才能使用ng命令 然后我的解决方案是 找到一台已经安装好此包的机器
  • Node处理csv文件(利用csv-parse读取指定字符串内的文件片段)

    需求 读取一个csv文件 需要从指定字符串开始读取至指定字符串结束 由于csv文件可能使用不同环境打开编辑过 末尾包含很多多余的分隔逗号 去除这些逗号 使用 Stream const parse require csv parse cons
  • node调用谷歌翻译Api,实现自动国际化

    原因 项目国际化过程繁琐 每次都需要人工去google翻译 导致工作效率不高 需求 1 减少人工的重复劳动 提高工作效率 2 使用脚本调用谷歌翻译接口自动化翻译 3 free 作为程序员肯定接受不了付费服务 找方法解决限制 前期准备 1 谷
  • mongodb 关于 整数类型 和 字符串类型 索引的比较

    想看看到底是 整数类型的索引快呢 还是字符串类型的索引快 到底快多少呢 内存分别占多少呢 今天就来测试一下 配置 华硕飞行堡垒6 500G 的 SSD 准备数据 a 是 for 循环的变量 id a name abcdefg a 2千万的数
  • Node之在多个子进程中运行Node.js应用程序

    引 一个Node js应用程序只能使用在一个线程中 最近 为了充分发挥多核CPU的优势 Node js中提供了一个cluster模块 允许在多个子进程中运行不同的Node js应用程序 使用fork方法创建worker对象 在cluster
  • Node利用connect中间件 及bodyParser处理文件上传

    1 html
  • Angular --官方文档使用 Angular CLI创建项目

    1 在node环境下 标配 node v npm v 指令在命令窗口查看两个的版本号 node高于6 9 3 npm版本高于3 0 0 如果你是新安装的话 就不要考虑这个问题了 2 全局安装 Angular CLI npm install
  • Node.js web3.js编译、部署智能合约

    Node js web3 js编译 部署智能合约 供参考脚本 https github com Saturday24 Smart Contracts Script 1 编译脚本 a install web3 solc fs path b 编
  • nginx基本介绍(安装、常用命令、反向代理)

    文章目录 引言 一 nginx是什么 二 nginx的下载和安装 1 下载 2 windows下安装 3 运行 4 外部服务器无法访问问题 三 nginx的常用命令 四 nginx config 五 FileZilla 1 什么是FileZ
  • npm、yarn、pnpm如何清除缓存?

    前端工程化创建项目会经常使用各种安装包管理工具 安装各种前端依赖包 例如 npm yarn pnpm等 时间一长 各种安装包管理工具的在安装依赖时 留下的缓存文件就会变得很大 以至于影响系统的运行 因此必要时清除缓存就是一个不错的选择 本文
  • Express初学之入门

    1 Express简介 基于Node的极简MVC框架 提供灵活的路由功能 提供强大的中间件机制 内核极小 扩展性很好 使用广泛 2 路由机制 Express概念 定义了Api的地址 请求 响应方式 方法 天然支持HTTP Method 中的
  • node环境实现console输出不同颜色

    一 输出规则分析 1 输出及打印如下 console log x1B 31m s x1B 0m 这是红色 console log x1B 36m s x1B 0m 这是青色 2 规则说明 x1B 31m 是一个转义序列 它将被您的终端拦截并
  • jsoup的Elements类

    随时随地阅读更多技术实战干货 获取项目源码 学习资料 请关注源代码社区公众号 ydmsq666 一 简介 该类是位于select包下 直接继承自Object 所有实现的接口有Cloneable Iterable
  • 【node】12、Koa实现简单爬虫案例

    效果图如下 首先我们新建文件夹 进入终端 初始化node项目 npm init y 安装koa搭建服务模块 npm install koa 安装superagent发送请求模块 npm install superagent 安装cheeri
  • node快速创建一个工程项目

    1 安装express npm install g express 2 新建一个工程 指定使用ejs模板引擎 express e 文件名 3 安装需要的模块 cd 文件名 npm install 4 启动 SET DEBUG 文件名 npm
  • Node.js爬虫实战:百度图片爬取

    说在前面 网络爬虫是一种自动化工具 能够模拟人类在互联网上浏览和提取信息的行为 它的应用范围广泛 包括数据采集 信息监控 搜索引擎优化等方面 而在数据抓取和处理中 获取图片资源往往是一个常见的需求 本文将介绍如何使用Node js和相关库构

随机推荐

  • STM32F7--->FMC(可变存储控制器) Flexible Memory Controller

    本文为STM32F7的FMC xff0c 为个人摘取与总结笔记 xff0c 详见 STM32F7 中文参考手册 第 13 章 xff08 286 页 xff09 的相关介绍 FMC可变存储控制器 概述框图主要用途外部器件地址映射 概述 FM
  • jsp上传图片失败,总是java.lang.NullPointerException: null

    检查jsp中是否指定 name属性 检查form表单是否指定entype 文件夹拒绝访问 xff0c 检查代码逻辑
  • Linux下如何安装Java环境的详细教程

    1 下载Linux版本的JDK 下载JDK地址 xff1a https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 2 使用Xft
  • Springboot整合RabbitMQ实现广播模型

    生产者代码 package com example newrabbitmq span class token punctuation span span class token function import span org junit
  • opencv 视频自动截图-小工具

    采用 xff1a python多进程 实测 cpu i7 9700 92秒 13456张 xff0c 平均约每秒146张 span class token keyword import span multiprocessing span c
  • halcon基础语法

    判断 xff1a if else 与 switch 与 and 或 or 非 not 条件 其中1个成立 xff0c 则为真 xff0c 其他情况均为假 xor dev open window span class token punctu
  • C# 字符串各种操作

    C 字符串 xff1a 字符串 转 char类型的数组字符串 批量合成字符串大小写转换字符串分割字符串替换字符串 是否包含字符串 比较字符串截取字符串 是否 以什么开头 结尾 字符串 第一个 最后一个 字符串 去除空格字符串 空与null
  • C# 里氏转换

    子类可以赋值给父类 子类可以转换为父类 protected 修饰符 是让这个字段 xff0c 在子类中也可以访问 设定访问权限 span class token keyword using span span class token nam
  • Node.js — 内置API模块

    文章目录 0 JS 与 Node js的理解 内置API模块1 导入 fs 模块 xff0c 导入文件系统模块2 导入 path 模块 xff0c 读取文件 xff0c 路径处理模块3 http xff08 创建web服务器的 xff09
  • C# 列表:ArrayList、字典:Hashtable、增删改查

    添加单个 对象或多个 删除指定单个 范围 清空 是否 包含 不包含 索引直接修改 列表 xff1a ArrayList span class token comment 集合 xff08 我称之为列表 xff09 span span cla
  • C# path类:操作路径、File类:操作文件、文件流读写

    路径操作 span class token class name span class token keyword string span span str span class token operator 61 span span cl
  • C# 列表:list 字典:dict

    列表 list 增删改查 与数组转换 span class token comment 创建泛型集合 span span class token class name List span class token punctuation lt
  • C# 虚方法多态、抽象类多态、接口

    C 虚方法多态 抽象类多态 虚方法 xff1a 希望重新父类中的某个方法时 xff0c 使用虚方法 抽象类 xff1a 有多个规定的处理方式 xff0c 但实际实现的方式不同 xff0c 使用抽象类 抽象类就是为了设立规范 xff0c 为了
  • halcon 学习:图像读取与保存、查看类型、图像大小、转为灰度、分割与合并通道、获取图像指针、

    halcon 学习 xff1a 图像读取与保存 查看类型 图像大小 转为灰度 分割与合并通道 获取图像指针 read image span class token punctuation span Image span class toke
  • halcon 获取XLD亚像素的测量距离

    read image span class token punctuation span Image span class token string 39 F xue xi 1 png 39 span span class token pu
  • halcon 基础语法:数组、向量、字典、

    数组 数组 Tuple 1 span class token operator 61 span span class token punctuation span span class token number 1 span span cl
  • halcon 电气柜绿灯位置安装是否正确

    思路 xff1a 找到电气柜的区域根据绿色通道对绿色敏感 xff0c 找到绿色按钮特征过滤 xff0c 与空对象相比 xff0c 确定绿色按钮是否存在填充后截取出来 xff0c 转为亚像素 xff0c 筛选和计算中心点中心点是否在规定区域内
  • C# 基础语法示例

    基础语法 span class token keyword using span span class token namespace System span span class token punctuation span span c
  • C# 委托的基础使用

    委托 我认为委托实际上是一种设计模式的封装 委托的本质就是 xff0c 将大致的流程定下来 xff08 包含输入与输出格式 xff09 xff0c 将其中计算的细节由一个被委托的函数进行具体实现 委托 xff1a 将函数当作形参进行传递 要
  • Node.js — 模块化

    文章目录 1 模块化1 模块化与作用域2 module 模块3 npm与包 1 模块化 1 模块化与作用域 编程领域中的模块化 xff1a 遵守固定的规则 xff0c 把一个大文件拆成独立并相互依赖的多个小模块 模块化好处 xff1a 提高