Node.js项目的文件夹结构
我注意到Node.js项目经常包含这样的文件夹:
/ libs,/ vendor,/ support,/ spec,/ tests
这些是什么意思? 他们之间有什么不同,我应该在哪里包含引用的代码?
关于你提到的文件夹:
- / libs通常用于自定义类/函数/模块
- / vendor或/ support包含第三方库(当使用git作为源代码控制时,添加为git子模块)
- / spec包含BDDtesting的规范 。
- / tests包含应用程序的unit testing(使用testing框架,参见这里 )
注意:由于NPM引入了一个干净的包pipe理,因此/ vendor和/ support都被弃用。 build议使用NPM和package.json文件处理所有第三方依赖关系
在构build一个相当大的应用程序时,我推荐以下额外的文件夹(特别是如果您使用某种types的MVC- / ORM-框架,如express或mongoose ):
- /模型包含所有的ORM模型(在mongoose中称为
Schemas
) - /视图包含您的视图模板(使用快速支持的任何模板语言)
- / public包含所有静态内容(图像,样式表,客户端JavaScript)
- / assets / images包含图像文件
- / assets / pdf包含静态pdf文件
- / css包含样式表(或由css引擎编译的输出)
- / js包含客户端JavaScript
- / controllers包含你的所有快速路由,由应用程序的模块/区域分开(注意:当使用express的自引导function时,这个文件夹被称为/ routes )
我习惯了这种方式来组织我的项目,我认为它的工作得很好。
基于CoffeeScript的Express应用程序更新(使用连接资产 ):
- / app包含你编译的JavaScript
- / assets /包含所有需要编译的客户端资源
- / assets / js包含您的客户端CoffeeScript文件
- / assets / css包含所有的LESS /手写笔样式表
- / public /(js | css | img)包含不被任何编译器处理的静态文件
- / src包含所有服务器端特定的CoffeeScript文件
- / test包含所有的unit testing脚本(使用您select的testing框架实现)
- / views包含所有的快速视图(不pipe是玉石,ejs还是其他模板引擎)
有一个关于GitHub的讨论,因为类似于这个问题: https : //gist.github.com/1398757
您可以使用其他项目进行指导,在GitHub中search:
- ThreeNodes.js – 在我看来,似乎有一个不适合每个项目的特定结构;
- 更轻 – 更简单的结构,但缺乏一点组织;
最后,在一本书( http://shop.oreilly.com/product/0636920025344.do )中提出了这个结构:
- 的index.html
- JS /
- main.js
- 楷模/
- 意见/
- collections/
- 模板/
- 库/
- 骨干/
- 下划线/
- …
- 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目录中的DB和APP文件夹。
这是间接的答案,关于文件夹结构本身,非常相关。
几年前,我有同样的问题,采取了一个文件夹结构,但不得不做很多目录后来移动,因为该文件夹的目的不同于我已经在互联网上阅读,也就是说,一个特定的文件夹具有什么一些文件夹上不同人的不同含义。
现在,做了多个项目,除了解释所有其他的答案,在文件夹结构本身,我强烈build议遵循Node.js本身的结构,可以看到: https : //github.com/ nodejs /节点 。 它有很多细节,比如棉绒和其他的,它们有什么文件和文件夹结构以及在哪里。 一些文件夹有一个自述文件,解释该文件夹中的内容。
从上面的结构开始是好事,因为有一天会有新的需求进来,但是你将会有一个改进的空间,因为Node.js本身已经被多年的维护了。
希望这可以帮助。