首页 > 编程语言 >Node.js 的 模块化

Node.js 的 模块化

时间:2024-08-21 10:40:56浏览次数:14  
标签:Node npm 模块化 js registry 模块 镜像 加载

Node.js 中的模块

Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖

  • 每个模块内部,module 变量代表当前模块
  • module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
  • 加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块

Node.js 中的第三方模块又叫做包

不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。Node.js 中的包都是免费且开源的

  • 由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发的时,效率很低
  • 包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率
  • 包和内置模块之间的关系,类似于 jQuery和 浏览器内置 API 之间的关系

我们可以使用这些命令在项目中添加包

npm install 包的完整名称
#或者
npm i 包的完整名称
npm i 包的完整名称 包的完整名称(加空格可以安装多个包)
npm add 包的完整名称

使用 npm uninstall 来卸载指定的包

使用镜像源可以解决一些npm下载缓慢的问题

设置镜像

npm 官方原始镜像网址是:https://registry.npmjs.org/
淘宝 NPM 镜像:http://registry.npmmirror.com
阿里云 NPM 镜像:https://npm.aliyun.com
腾讯云 NPM 镜像:https://mirrors.cloud.tencent.com/npm/
华为云 NPM 镜像:https://mirrors.huaweicloud.com/repository/npm/
网易 NPM 镜像:https://mirrors.163.com/npm/
中国科学技术大学开源镜像站:http://mirrors.ustc.edu.cn/
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/

使用淘宝镜像源加速 NPM

# new
npm config set registry https://registry.npmmirror.com
# old
npm config set registry https://registry.npm.taobao.org

使用阿里云 镜像源加速 NPM

npm config set registry https://npm.aliyun.com

使用腾讯云镜像源加速 NPM

npm config set registry http://mirrors.cloud.tencent.com/npm/

使用华为云 镜像源加速 NPM

npm config set registry https://mirrors.huaweicloud.com/repository/npm/

返回npm 官方原始镜像

npm config set registry https://registry.npmjs.org/

使用那个镜像,只需要 npm config set registry + 对应的镜像网址就好了

npm config set registry + URL

查看当前的镜像源:

npm config get registry
包的分类

项目包

那些被安装到项目的 node_modules 目录中的包,都是项目包。项目包又分为两类

  • 开发依赖包(被记录到 devDependencies节点中的包,只在开发期间会用到)npm i 包名 -D
  • 核心依赖包(被记录到 dependencies节点中的包,在开发期间和项目上线之后都会用到)npm i 包名

全局包

在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为全局包

全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下

npm install 包名 -g	# 全局安装指定的包
npm uninstall 包名 -g	# 卸载全局指定的包

注意

  • 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令
  • 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可
规范的包结构

一个规范的包,它的组成结构,必须符合以下 3 点要求

  • 包必须以单独的目录而存在
  • 包的顶级目录(点进去的目录)下要必须包含 package.json 这个包管理配置文件
  • package.json 中必须包含 nameversionmain这三个属性,分别代表包的名字、版本号、包的入口(.js文件)(require()加载的文件)

模块的加载机制

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

  1. 内置模块的加载优先级最高(当第三方模块和内置模块同名时)
  2. 使用 require() 加载自定义模块时,必须指定以 ./…/ 开头的路径标识符。在加载自定义模块时,如果没有指定 ./…/ 这样的路径标识符,则 node 会把它当作内置模块或第三方模块进行加载。
  3. 在使用 require() 导入自定义模块时,如果省略了文件的扩展名,Node.js 会按顺序分别尝试加载以下的文件
    1. 按照确切的文件名进行加载
    2. 补全 .js 扩展名进行加载
    3. 补全 .json 扩展名进行加载
    4. 补全 .node 扩展名进行加载
    5. 加载失败,终端报错
  4. 如果传递给 require() 的模块标识符不是一个内置模块,也没有以 ./ 或 …/ 开头,则 Node.js 会从当前模块的父目录开始,尝试从 /node_modules 文件夹中加载第三方模块,如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录
  5. 假设在 ‘C:\Users\Public\Desktop\demo\node_modules\a.js’ 里调用 require(‘tools’),Node.js 会按以下顺序查找
    1.C:\Users\Public\Desktop\demo\node_modules\tools
    2.C:\Users\Public\Desktop\node_modules\tools
    3.C:\Users\Public\Desktop\tools
    ....
    4.C:\tools
    5.报错
  6. 当把目录作为模块使用require加载时,会按照下面的步骤尝试加载模块
    在被加载的目录下查找一个叫做 package.json 的文件,并寻找 main 属性值作为 require() 加载的入口-->(如果目录里没有 package.json 文件,或者 main 入口不存在或无法解析)试图加载目录下的 index.js 文件-->在终端打印错误消息,报告模块的缺失:Error: Cannot find module ‘xxx’

标签:Node,npm,模块化,js,registry,模块,镜像,加载
From: https://www.cnblogs.com/xxaxf/p/18371102

相关文章

  • JSP基于SSM会议室预定系统7e5h3(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着企业规模的不断扩大和会议活动的日益频繁,会议室资源的管理与预定成为了一个亟待解决的问题。传统的手工管理方式不仅效率低......
  • JSP基于ssm的二手手机商城rk2i3程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景与意义随着科技的快速......
  • JSP基于servlet技术实现游戏娱乐平台55c2v
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景随着互联网技术的飞速......
  • JSP基于JSP的新闻发布及管理系统51u85--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景与意义在信息爆炸的时......
  • nvm + node 安装
    nvm(nodeversionmanagement)是用于管理多个nodejs的版本控制工具。通过nvm可以安装和切换不同版本的nodejs。nvm主要是为了解决node.js各种版本存在不兼容现象。准备如果你安装了node.js,请把它删除Releases·coreybutler/nvm-windows(github.com)下载nvm安装包......
  • 783java jsp SSM校园兼职管理系统(源码+文档+开题+运行视频+讲解视频)
      项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8......
  • 777java jsp SSM水果蔬菜商品商城管理系统(源码+文档+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 782java jsp SSM课程辅助教学网站系统(源码+文档+开题+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • createjs tween用法
    setInterval(()=>{LetCoin=newlib.Coin();Coin.x=Math.floor(Math.random()*(600-30+1))+30);Coin.y=-50;exportRoot.addChildAt(Coin,1);createjs.Tween.get(Coin).to({y:400},2500).call(()=>{exportRoot.removeChild(Coin);}).addEvent......
  • Vue.js 中的 vue-property-decorator 使用详解
    引言Vue.js是一个流行的前端框架,它的核心理念是让开发者以声明式的方式构建用户界面。尽管Vue的官方API非常直观易用,但随着项目的复杂度增加,使用TypeScript进行类型检查和更好的代码组织变得越来越重要。vue-property-decorator是一个用于在Vue.js中使用TypeScr......