Node.js项目的文件夹结构

Node.js项目的文件夹结构,node.js,Node.js,我注意到Node.js项目通常包括以下文件夹: /libs、/vendor、/support、/spec、/tests 这到底是什么意思?它们之间有什么不同?我应该在哪里包含引用代码?关于您提到的文件夹: /libs通常用于自定义类/函数/模块 /vendor或/support包含第三方库(作为git添加 使用git作为源代码管理时的子模块) /spec包含BDD测试的规范 /tests包含应用程序的单元测试(使用测试 框架,请参见 ) 注意:/vendor和/support都不推荐使用,因

我注意到Node.js项目通常包括以下文件夹:

/libs、/vendor、/support、/spec、/tests


这到底是什么意思?它们之间有什么不同?我应该在哪里包含引用代码?

关于您提到的文件夹:

  • /libs
    通常用于自定义
    类/函数/模块
  • /vendor
    /support
    包含第三方库(作为git添加 使用git作为源代码管理时的子模块)
  • /spec
    包含BDD测试的规范
  • /tests
    包含应用程序的单元测试(使用测试 框架,请参见 )
注意:
/vendor
/support
都不推荐使用,因为NPM引入了干净的包管理。建议使用NPM和package.json文件处理所有第三方依赖关系

在构建一个相当大的应用程序时,我建议使用以下附加文件夹(特别是如果您使用某种MVC-/ORM框架,如或):

  • /models
    包含所有ORM模型(在mongoose中称为
    模式
  • /views
    包含视图模板(使用express支持的任何模板语言)
  • /public
    包含所有静态内容(图像、样式表、客户端JavaScript)
    • /assets/images
      包含图像文件
    • /assets/pdf
      包含静态pdf文件
    • /css
      包含样式表(或由css引擎编译的输出)
    • /js
      包含客户端JavaScript
  • /controllers
    包含应用程序的模块/区域分隔的所有express routes(注意:使用express的引导功能时,此文件夹称为
    /routes
我习惯了用这种方式组织我的项目,我认为效果很好

基于CoffeeScript的Express应用程序更新(使用):

  • /app
    包含已编译的JavaScript
  • /assets/
    包含所有需要编译的客户端资产
    • /assets/js
      包含客户端咖啡脚本文件
    • /assets/css
      包含所有LESS/Stylus样式表
  • /public/(js | css | img)
    包含任何编译器都无法处理的静态文件
  • /src
    包含所有服务器端特定的咖啡脚本文件
  • /test
    包含所有单元测试脚本(使用您选择的测试框架实现)
  • /views
    包含所有express视图(无论是jade、ejs还是任何其他模板引擎)

有一个关于GitHub的讨论,因为一个类似的问题:

您可以使用其他项目作为指导,在GitHub中搜索:

  • ThreeNodes.js——在我看来,似乎有一个特定的结构不适合每个项目
  • 更轻——结构更简单,但缺乏一点组织性
最后,在一本书中()提出了这种结构:

├── index.html
├── js/
│   ├── main.js
│   ├── models/
│   ├── views/
│   ├── collections/
│   ├── templates/
│   └── libs/
│       ├── backbone/
│       ├── underscore/
│       └── ...
├── css/
└── ...

我的项目架构中的更多示例可以在此处看到:

├── Dockerfile
├── README.md
├── config
│   └── production.json
├── package.json
├── schema
│   ├── create-db.sh
│   ├── db.sql
├── scripts
│   └── deploy-production.sh 
├── src
│   ├── app -> Containes API routes
│   ├── db -> DB Models (ORM)
│   └── server.js -> the Server initlializer.
└── test

基本上,逻辑应用程序在SRC dir中分离为DB和app文件夹。

这是间接的回答,就文件夹结构本身而言,非常相关

几年前,我也有同样的问题,采用了文件夹结构,但后来不得不进行大量目录移动,因为文件夹的用途与我在互联网上读到的不同,也就是说,某个特定文件夹的功能对于某些文件夹上的不同人有不同的含义

现在,在完成了多个项目之后,除了在所有其他答案中对文件夹结构本身进行解释之外,我强烈建议遵循Node.js本身的结构,可以在:。linters和其他人说,它非常详细地介绍了他们所有的文件和文件夹结构以及在哪里。有些文件夹有一个自述文件,解释文件夹中的内容

从上面的结构开始是很好的,因为总有一天会有一个新的需求出现,但您将有一个改进的空间,因为Node.js本身已经遵循了它,并且已经维护了很多年


希望这能有所帮助。

需要注意的是,对于什么是最佳方法还没有达成共识,而且相关框架通常不会强制执行或奖励某些结构

我发现这是一个令人沮丧和巨大的开销,但同样重要。这是一种被淡化的版本(但在我看来更重要的是)。我想指出这一点,因为答案是一样的:你使用什么样的结构并不重要,只要它定义明确且连贯一致

因此,我建议寻找一份您喜欢的全面指南,并明确该项目基于此


这并不容易,尤其是如果你是新手的话!预计将花费数小时进行研究。您会发现大多数指南都推荐类似MVC的结构。虽然几年前这可能是一个可靠的选择,但如今情况并非如此。例如。

假设我们讨论的是web应用程序和构建API:

一种方法是按功能对文件进行分类,很像微服务体系结构。在我看来,最大的优势在于,非常容易看到哪些文件与应用程序的某个功能相关

最好的方法
books
  ├─ controllers
  │   ├─ booksController.js
  │   └─ authorsController.js
  │
  └─ entities
      ├─ book.js
      └─ author.js
user
  ├─ controllers
  │   └─ userController.js
  ├─ entities
  │   └─ user.js
  └─ middleware
       └─ authentication.js
loan
  ├─ controllers
  │   └─ loanController.js
  └─ entities
      └─ loan.js
favorites
  ├─ controllers
  │   └─ favoritesController.js
  └─ entities
      └─ favorite.js