2016-02-15 54 views
0

我有一個NodeJS項目,有一些服務器和客戶端,都寫在ES2015和編譯ES5巴貝爾,由Gulp執行。在哪裏把JS「建立輸出」

從Java來到,我所做的構建過程中把結果在一個DIST文件夾中,這樣的目錄結構如下:

 
./node_modules 
./client 
./server 
./static 
./dist/client # Result of /client compilation 
./dist/server # Result of /server compilation 

現在,這是有點難看,因爲有些東西在這片土地不同的地方,在不同的深度。你遇到各種各樣的問題。仔細計算進口的點數。使用__dirnameprocess.cwd()來獲取相對於正確「根」的東西。以類似node dist/server/server.js的醜陋路徑運行應用。等等。

你通常如何解決這個問題?您是否可以將編譯結果放在同一級別,不同的目錄名稱中:

 
./build-client 
./build-server 

還有其他嗎?

回答

0

您遇到的各種問題

你能否具體列舉這些?我個人並不覺得這個結構有問題。

__dirname

沒有必要使用__dirname進口。如果您使用相對路徑執行導入,則暗示__dirname。使用相對路徑是慣用的東西。它也更好,因爲__dirname將是絕對的,因此是系統特定的,因此具有部署/共享問題。

雖然技術上可以將其用於CommonJS模塊,並且babel甚至可以支持它,但ES2015要求導入爲靜態字符串,因此當節點最終本機支持ES2015模塊時,任何非靜態字符串都可能不受支持。

process.cwd()

這不能使用,因爲它會導致你的程序失敗大多數其他比你試圖運行它,並沒有發生在時人的正確的目錄。這也不適用於ES2015。


總體來說,我的建議是

答:如果您的客戶端和服務器端的代碼大多是獨立的,相對路徑大多是目錄中只./../,這很好,只是調整到舒適用它。 B.如果您通常在客戶端和服務器之間導入,則代碼會被耦合,您可能會重新考慮客戶端/服務器是否是分離代碼的正確軸。如果您的應用程序具有高度「同構」特性,只需重構代碼即可反映代碼中存在的實際耦合,並且您自然會將必要的路徑深度減至最小。

我的主要痛點真的有嵌套在「DIST」目錄下的輸出,我不知道怎麼說,通常解決

你不需要在源代碼來解決這個問題。您的客戶端打包程序(webpack,browserify或類似的)將使用節點需求算法自動使用來自npm的句柄第三方依賴關係。如果你有一個非npm銷售的依賴關係,只需要用一個相對路徑引用它,你的捆綁器就可以處理它。

如果您想進一步的幫助,我建議你從普通的格式化你的問題非常非常具體的用指定的,所以我們可以在您的情況,而不是一些假設/通用直接評論的路徑和工具的詳細信息。

+0

我沒有從客戶端到服務器的任何導入,反之亦然。但是如果我在項目根目錄中有一個非編譯的「供應商」目錄,我將如何導入? __dirname vs. process.cwd() - 不用於導入,但對於讀取靜態文件,配置等有用 我的主要難點在於真正將輸出嵌套在「dist」目錄中,我不知道通常如何解決。 –