上一篇文章中,简单介绍了如何自定义模块, 以及如何在其他模块中调用自定义模块。

本文主要介绍:

(1)自定义项目(如何使用NPM创建一个最简单的项目)

(2)第三方模块(如何使用NPM引入第三方模块)

1.项目化

Node.js 项目化开发的核心是规范目录结构、统一依赖管理、标准化构建、运行流程

项目化开发本质是解决零散脚本的痛点:

  • 目录混乱,文件无统一组织;
  • 依赖管理无序(手动复制第三方包);
  • 无统一的启动 / 构建 / 部署流程;
  • 代码复用性、可维护性差。

项目化开发后,能实现:目录规范、依赖可控、流程标准化、代码模块化

(1)标准化项目目录结构

一个规范的 Node.js 项目目录需兼顾「功能划分」和「易维护性」,以下是通用的目录结构(适配 API 服务、工具类项目等绝大多数场景):

your-project/          # 项目根目录
├─ src/                # 业务源码目录(核心)
│  ├─ config/          # 配置文件(数据库、端口、环境变量)
│  │  └─ index.js      # 配置导出入口
│  ├─ controller/      # 业务逻辑层(处理请求、调用服务)
│  ├─ service/         # 核心服务层(封装业务逻辑、数据处理)
│  ├─ utils/           # 工具函数模块(通用方法、格式化等)
│  ├─ routes/          # 路由层(接口路由定义)
│  └─ app.js           # 应用入口(创建服务、挂载中间件)
├─ node_modules/       # 第三方依赖(npm 安装,自动生成)
├─ .env                # 环境变量(开发/生产环境配置,不提交到仓库)
├─ .env.example        # 环境变量示例(提交到仓库,供团队参考)
├─ .gitignore          # git 忽略文件(node_modules、.env 等)
├─ package.json        # 项目核心配置(依赖、脚本、元信息)
├─ package-lock.json   # 依赖版本锁定(确保团队依赖一致)
└─ README.md           # 项目说明(启动方式、功能、部署流程)

关键目录说明:

  1. src/:所有业务代码放在这里,避免根目录杂乱;
  2. config/:集中管理配置,避免硬编码(如数据库连接串、端口号);
  3. service/controller/:分层开发,解耦业务逻辑和请求处理;
  4. .env:存放敏感配置(如数据库密码),通过 dotenv 加载,不提交到代码仓库。

(2)package.json

通过 npm init -y 初始化生成,是项目的「身份证」,包含依赖、脚本、元信息,示例如下:

{
  "name": "node-demo-project",       // 项目名(小写、无空格)
  "version": "1.0.0",                // 版本号
  "description": "Node.js 项目化开发示例", // 项目描述
  "main": "src/app.js",              // 项目入口文件
  "scripts": {                       // 自定义脚本(npm run 执行)
    "start": "node src/app.js",      // 启动项目
    "dev": "nodemon src/app.js",     // 开发环境(热重载)
    "test": "echo \"Error: no test specified\" && exit 1" // 测试脚本
  },
  "dependencies": {                  // 生产依赖(运行时必需)
    "dotenv": "^16.0.3",             // 加载环境变量
    "express": "^4.18.2"             // Web 框架(示例)
  },
  "devDependencies": {               // 开发依赖(仅开发时用)
    "nodemon": "^3.0.1"              // 热重载工具
  },
  "author": "你的名字",
  "license": "MIT"
}
2.如何创建一个最简单的node.js项目

在D盘根目录下创建一个文件夹,名字为node,然后使用vscode打开这个文件夹,点击“终端”,然后点击“新建终端”

然后在底部的终端,输入npm init -y

就可以看到正在初始化

创建的package.json文件内容如下:

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "commonjs"
}

我们修改一下package.json文件,增加一个启动脚本

 "start": "node index.js" 

修改完如下:

在vscode中新增一个文件,名字为index.js

然后在index.js中新增一行测试代码

console.log('Hello World!'); 

然后在控制台中输入npm start,可以看到在控制台中输出了hello world

3.使用第三方模块

这里引入了moment模块,进行格式化日期操作。

(1)下载安装moment模块

在vscode控制台中输入安装moment模块的命令:

npm install moment

可以看到项目中多了一个node_modules文件夹,这个文件夹里面多了一个moment文件夹,这样就安装成功了 一个第三方模块。

同时,package.json文件中也多了一个依赖项目。

(2)编写format.js文件

这里新编写一个format.js文件,然后输入下面的代码

let moment = require('moment'); //引入第三方库
moment.locale('zh-cn'); //设置中文语言环境
//格式化日期函数
function formatDate(date) { 
    //格式化日期为“YYYY年MM月DD日 HH:mm:ss”格式
    let time = moment(date).format('YYYY年MM月DD日 HH:mm:ss');
    return  time;
}

module.exports = { 
    //自定义模块中暴露函数
    formatDate 
}; 

(3)修改index.js文件

修改index.js文件如下:

var format = require('./format.js');    //引入自定义模块

//console.log('Hello World!'); 

let date = new Date();  //获取当前日期
console.log(format.formatDate(date));

保存文件后,然后在控制台中输入 npm start,重新启动项目

可以看到控制台中输出了已经格式化的日期了。