2011-03-03 56 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