2011-03-03 64 views
295

文件夹结构,我注意到,Node.js的项目通常包含的文件夹这样的:支持了Node.js的项目

/库,/供应商/,/规格,/测试

这些意味着什么?他们之间有什么不同,我应该在哪里包含引用的代码?你提到

回答

389

关于文件夹:

  • /库通常用于自定义类/功能/模块
  • /供应商/支撑包含第三方库(添加作为GIT中 子模块使用git作为源控件时)
  • /spec包含BDD测试的规范。
  • /测试包含单元测试用于应用(使用测试 框架,见 here

注:由于NPM引入干净包管理两者/供应商和/支撑已被弃用。建议使用NPM和包处理所有第三方依赖项。JSON文件

当建立一个相当大的应用程序,以下笔者推荐的其他文件夹(尤其是如果你正在使用某种形式的MVC-/ORM框架像expressmongoose):

  • /模型包含了所有的ORM模型(猫鼬称为Schemas
  • /视图包含您的视图模板(使用快递支持的任何模板语言)
  • /公共包含所有静态内容(图片,样式表,客户端的JavaScript)
    • /资产/图像包含图像文件
    • /资产/ PDF包含静态的PDF文件
    • /CSS包含样式表(或编译的输出通过一个CSS发动机)
    • /JS包含客户端的JavaScript
  • 包含所有的快递路线,您的应用程序的模块/区域隔开/控制器(注:使用快递的引导功能时,该文件夹被称为/路线

我习惯了这种方式来组织我的项目,我认为它工作得很好。

更新基础的CoffeeScript-Express应用程序(使用connect-assets):

  • /应用包含您编译的JavaScript
  • /资产/包含需要编译 所有客户端资产
    • /assets/js包含您的客户端的CoffeeScript文件
    • /资产/ CSS包含所有LESS /手写笔样式表
  • /公/(JS | CSS |图片)包含您所不处理静态文件任何编译器
  • /src目录包含了所有你的服务器端特定的CoffeeScript文件
  • /测试包含了所有的单元测试脚本(使用您选择的测试框架实现)
  • /视图包含所有发表看法(无论是玉石,EJS或任何其他模板引擎)
+5

你会在哪里把你的客户端JS,CSS,图像? 会建议在公共文件夹类似的文件夹结构,如: 公共/资产 公共/资产/ CSS 公共/资产/图像 公共/资产/文档 公共/库 公共/支持 公共/测试 大众/模型 大众/观点 公共/控制器 ? – ezmilhouse 2011-08-23 11:00:30

+2

expressjs创建./routes目录,是否与您的示例中的./controllers相同? – chovy 2012-09-17 03:02:10

+2

你为什么不用这个建议创建一个Yeoman发电机?它可能成为一个标准。 – 2013-06-07 12:28:15

44

没有因为类似这样的问题在GitHub上的讨论: https://gist.github.com/1398757

您可以使用其他项目的指导,在GitHub上搜索:

  • ThreeNodes.js - 在我看来,似乎有不适合每个项目的具体结构;
  • 打火机 - 更简单的结构,但缺乏一点组织;

最后,在一本书(http://shop.oreilly.com/product/0636920025344.do)表明,这种结构:

  • 的index.html
  • JS/
    • main.js
    • 型号/
    • 意见/
    • collections/
    • 模板/
    • 库/
      • 骨干/
      • 下划线/
      • ...
  • CSS/
  • ...从我的项目架构
+12

为Github讨论+1,这真的很酷! – Mahdi 2013-06-13 17:19:14

+0

我创建了一个动态需要文件的模块,允许您通过功能来构建项目,而不是典型的Model,View,Controller。某人:https://github.com/ssmereka/crave – Scott 2016-02-24 05:05:43

+0

如果你的应用程序还包含一个前端应用程序,你把它放在'src'下,或者做到了这一点,那么在asp或php中使用简单的'include'文件夹怎么样? – stackdave 2016-12-01 17:24:50

9

更多例子,你可以在这里看到:基本上

├── 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目录中的APP文件夹。

+0

前端应用程序获取自己的文件夹(使用自己的'package.json'和类似的文件夹结构)? – wal 2017-05-12 00:09:30

+0

@wal我更喜欢将前端项目分离到另一个存储库,因为它更有组织 – 2017-08-09 18:46:15

0

这是间接的答案,关于文件夹结构本身,非常相关。

几年前我有同样的问题,采取了一个文件夹结构,但不得不做很多目录后来移动,因为该文件夹的目的不同于我在互联网上阅读的目的,也就是什么特定文件夹对于某些文件夹上的不同人员具有不同的含义。

现在,除了解释所有其他答案以外,还对文件夹结构本身做了多个项目,我强烈建议遵循Node.js本身的结构,该结构可以在以下位置看到:https://github.com/nodejs/node。它有很多细节,例如棉绒和其他人,他们有什么文件和文件夹结构以及在哪里。一些文件夹有一个自述文件,解释该文件夹中的内容。

从上面的结构开始是很好的,因为有一天会有新的需求进来,但是您将有一个改进的范围,因为它已经被多年来维持的Node.js本身所遵循。

希望这会有所帮助。

0

重要的是要指出,关于什么是最佳方法和相关框架一般不强制或奖励某些结构没有共识。

我觉得这是一个令人沮丧和巨大的开销,但同样重要。它是style guide issue的一种低调版本(但IMO更重要)。我喜欢指出这一点,因为答案是一样的:只要明确定义和连贯,您使用的结构并不重要。

因此,我会建议寻找一份您喜欢的综合指南,并明确说明该项目是基于此。

这并不容易,特别是如果你是新手!预计花上几个小时的研究。你会发现大多数指南推荐了一个类似于MVC的结构。虽然几年前这可能是一个坚实的选择,但现在不一定是这样。例如here's another approach