Node.js - 模块化与包管理工具

1. 前言

模块化 是代码组织的方式,而包管理工具是管理模块的工具。在现代项目开发中,模块化和包管理工具几乎是不可分割的一部分,它们一起构成了高效的开发工作流。

包代表了一组特定功能的源码集合,包管理工具可以对包进行下载安装,更新删除,上传等操作

常用的包管理工具有npm,yarn,cnpm,本文讲解Node.js中模块化与包的管理,使用。

2. 代码的模块化

2.1 代码模块化的声明与导入

javascript 复制代码
//index.js
function showName(){
    console.log("Ricardo")
}

module.exports = showName;

使用module.exports声明需要导出的模块

javascript 复制代码
//main.js
const s  =require('./index.js')
s()

在主代码文件中导入所需要的模块,导入完毕后即可使用。

2.2 包的导入

当使用 require('./folder')import './folder' 导入一个文件夹时,Node.js 会按照以下规则寻找模块:

第一步 :在文件夹中寻找 package.json 文件。

  • 如果找到 package.json 文件,Node.js 会读取其中的 main 字段(或 exports 字段)。
  • main 字段指定了该模块的入口文件
javascript 复制代码
{
  "name": "example",
  "version": "1.0.0",
  "main": "lib/index.js"
}

上述例子中,Node.js 会尝试加载 ./folder/lib/index.js ,若存在则导入成功

第二步:如果 package.json 文件不存在或 main 字段缺失

  • 如果找不到 package.json 文件,或文件中没有 main 字段,Node.js 会尝试导入文件夹下的默认文件:

    • 检查 index.js 文件

      • Node.js 会寻找文件夹下的 index.js 文件作为模块的入口。

      • 如果 index.js 存在,则导入成功。

    • 检查 index.json 文件

      • 如果 index.js 不存在,Node.js 会继续寻找 index.json 文件作为模块的入口。

      • 如果 index.json 存在且格式正确,则导入成功。

示例:

package.json指定main文件:

bash 复制代码
project/
├── folder/
│   ├── package.json
│   ├── lib/
│   │   └── main.js

package.json文件内容:

bash 复制代码
{
  "main": "lib/main.js"
}

导入时:

bash 复制代码
const module = require('./folder'); // 导入 ./folder/lib/main.js

3. npm

npm全称为Node package manager,意思为node的包管理工具,如果成功安装了node.js,则可以直接使用npm。

打开cmd,输入

bash 复制代码
npm -v

查看是否安装npm与版本号

4. 创建包项目

bash 复制代码
npm init

创建npm的配置文件,会让用户回答一系列问题,生成对应的json配置文件

包的名称不能为中文与大写,默认值为文件夹名称

也可以使用

bash 复制代码
npm init -y

快速创建对应的包文件,生成的 package.json 文件是项目管理、依赖安装、脚本定义的重要工具,是每个 Node.js 项目不可或缺的一部分。

5. npm搜索包

在终端中运行如下命令,node.js会返回对应的相关信息

bash 复制代码
npm s 关键词

或者在下述网址中搜索所需要的包信息

bash 复制代码
www.npmjs.com

6. npm包的安装

bash 复制代码
npm install 包的名字
npm i packageName

下载完成后所有的包会统一存放在node_modules文件夹中,并存放有相应包的版本信息

6.1 全局安装

使用-g进行全局安装

bash 复制代码
npm i -g nodemon

全局安装之后的包,独立的命令在命令行中使用,例如上述命令全局安装nodemon包,在命令行的任何位置运行nodemon命令,该命令的作用是自动重启node应用程序。

需要注意的是,不是所有的包都适合全局安装,只有全局类的工具才适合

bash 复制代码
npm root -g

使用上述命令查看全局安装的文件安装位置

6.2 安装依赖包

bash 复制代码
npm i

安装所有的依赖包,读取package.json文档,安装至当前文件夹下的node_modules文件,安装所有的依赖包

6.3 安装指定版本包

bash 复制代码
npm i packageName@版本号

在常规安装后使用@符并声明响应版本号

7. 包的使用

javascript 复制代码
//example
const uniq = require("uniq");

require是导入node_modules文件夹下uniq这个文件夹,访问包的信息,找到main参数所对应的代码文件;若当前文件夹下找不到对应包信息,则会返回上一级继续寻找,直到找到。

包的依赖:若创建了一个包为A,A中安装了包B,则称之为B为A的依赖包,也会说A依赖于B

|------|--------------------|-----------------------------------------------------------|
| 类型 | 命令 | 补充 |
| 生产依赖 | npm -S packageName | -S等效于--save,为包的默认引入模式。 包信息保存在package.json中dependencies属性中 |
| 开发依赖 | npm -D packageName | 等效于--save-dev. 包信息保存在package.json中的devDependencies属性中 |

开发依赖是在开发阶段中使用的依赖包,生产依赖是开发阶段和最终上线运行阶段都用到的依赖包

8. 配置别名

进入到package.json文件中,找到script对象,在内部声明对应的别名与命令

bash 复制代码
"script":{"server":"node ./test.js"}

在终端中运行,使用run命令,有自动向上级目录查找的特性

bash 复制代码
node run server

start别名比较特殊,运行时可以忽略run命令

bash 复制代码
npm start

9. 删除包

bash 复制代码
npm r packageName //删除文件夹中的包 
bash 复制代码
npm r -g packageName //删除全局包

10. 管理Node版本

nvm全称为Node Version Manager,方便切换不同版本的node,

首先下载nvm,选择nvm-setup.exe下载安装即可。

常用命令:

|----------------------|--------------------|
| 命令 | 说明 |
| nvm list avaliable | 显示所有可以下载的Node.js版本 |
| nvm list | 显示已安装的版本 |
| nvm install 18.2.1 | 安装18.2.1的版本 |
| nvm install latest | 安装最新版Node.js |
| nvm uninstall 18.2.1 | 删除18.2.1版本的Node.js |
| nvm use 18.2.1 | 切换18.2.1的Node.js |

相关推荐
XianxinMao18 分钟前
深度神经网络的校准问题研究:从架构差异到温度缩放优化
人工智能·架构·dnn
码蜂窝编程官方30 分钟前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的医院挂号预约管理系统
java·vue.js·spring boot·后端·spring
兮动人1 小时前
Golang 简要概述
开发语言·后端·golang
綦枫Maple2 小时前
《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)
java·spring boot·后端
bobz9652 小时前
Linux 系统中基于 ovs 或者传统 bridge 实现端口镜像
后端
Java中文社群2 小时前
场景题:如何实现亿级用户在线状态统计?
java·后端·面试
啊晚2 小时前
ASP.NET Core - 日志记录系统(一)
后端·asp.net
QQ27437851092 小时前
django网上商城系统
后端·python·django
sun_weitao2 小时前
Django创建数据表、模型、ORM操作
后端·python·django
Moment3 小时前
为什么面试官在面试中都爱问 HTTPS ❓❓❓
前端·后端·https