工程目录结构

NodeJS工程和浏览器端的JavaScript工程类似,都需要一个合理的目录结构来组织代码。本篇笔记我们介绍如何搭建一个规范的NodeJS工程目录结构,包括如何配置ESM模块机制、组织源码文件等内容。

创建基础工程

首先我们需要创建工程目录并初始化npm工程。

mkdir demo-node && cd demo-node && npm init -y

执行后会生成package.json文件,这是NodeJS工程的核心配置文件。

启用ESM模块机制

NodeJS默认使用CommonJS模块机制,但现代JavaScript开发中ESM(ECMAScript Modules)已成为标准。要在NodeJS中启用ESM,我们需要在package.json中添加"type": "module"配置。

package.json

{
  "name": "demo-node",
  "version": "1.0.0",
  "type": "module",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js",
    "dev": "node --watch src/index.js"
  }
}

配置说明:

  • type:设置为"module"表示工程中的.js文件默认使用ESM模块机制,如果不设置则默认为"commonjs"
  • main:指定工程的入口文件,当该工程作为npm包被其他工程引用时,会从这个入口文件导出模块
  • scripts:定义npm脚本命令,npm start用于启动程序,npm run dev使用--watch参数启动开发模式,文件变更时自动重启

注意:启用ESM后,require()module.exports等CommonJS语法将无法使用,需要改用importexport语法。如果工程中确实需要混用两种模块机制,可以使用.mjs后缀表示ESM模块,.cjs后缀表示CommonJS模块。

推荐的目录结构

下面是一个规范的NodeJS工程目录结构,适用于大多数后端服务或命令行工具类型的项目。

demo-node
  |_node_modules           // npm依赖包目录
  |_src                    // 源代码目录
    |_index.js             // 入口文件
    |_config               // 配置模块
      |_index.js
    |_utils                // 工具函数模块
      |_index.js
    |_services             // 业务逻辑模块
      |_index.js
  |_test                   // 测试代码目录
    |_index.test.js
  |_scripts                // 构建或部署脚本
  |_docs                   // 文档目录
  |_package.json           // npm工程描述文件
  |_package-lock.json      // 依赖版本锁定文件
  |_.gitignore             // Git忽略配置
  |_README.md              // 项目说明文档

目录说明:

  • src:存放所有源代码,入口文件通常命名为index.jsmain.jsapp.js
  • test:存放测试代码,测试文件通常以.test.js后缀命名
  • scripts:存放构建、部署、数据库迁移等辅助脚本
  • docs:存放项目文档

对于更复杂的大型项目,目录结构可能需要进一步细化。

demo-node
  |_node_modules
  |_src
    |_index.js
    |_config
    |_controllers          // 控制器层(处理请求)
    |_services             // 服务层(业务逻辑)
    |_models               // 数据模型层
    |_middlewares          // 中间件
    |_routes               // 路由定义
    |_utils                // 工具函数
    |_constants            // 常量定义
  |_test
    |_unit                 // 单元测试
    |_integration          // 集成测试
  |_scripts
  |_docs
  |_package.json

这种分层架构有助于保持代码的清晰和可维护性,不同层次的代码职责分明,便于团队协作开发。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。