2014-03-03 31 views
1

所以在工作中,我坐下來,請參閱Windows SkyDrive的警報在系統托盤中經過漫長的一天:過度迭代

Files can't be uploaded because the path of this file or folder is too long. Move the item to a different location or shorten its name. 

C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\grunt-contrib-nodeunit\node_modules\nodeunit\node_modules\tap\node_modules\runforcover\node_modules\bunker\node_modules\burrito\node_modules\traverse\example\stringify.js 

......有一陣子,我嘲笑技術限制。

但後來我想知道:是否需要在節點項目內的目錄遞歸量?這樣看來,超越"angular-app\server\node_modules"的路徑只是該項目的依賴關係作爲一個整體,可能會更好地表述爲:

C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\grunt-contrib-nodeunit\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\nodeunit\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\tap\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\runforcover\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\bunker\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\burrito\ 
C:\Users\Matthew\SkyDrive\Documents\Projects\Programming\angular-app\server\node_modules\traverse\ 

我真的沒有給它太多的思考之前,在節點包管理好像魔術相比很多平臺。

我會想象一些大規模的Node.js項目甚至包含很多重複的模塊(具有相同或相似的版本),這些模塊可以合併爲較少的數量。這可以說是:

  • 存儲和傳輸爲 重複的相關性的結果數據量的增加增加了軟件開發的成本。

  • 簡化的目錄結構(特別是在這種情況下)是 通常更易於瀏覽和理解。

  • 過長的路徑名可能會在某些計算環境中導致問題。

我所建議(如果這樣的事情不存在)是一個節點模塊:

  • 遞歸掃描節點項目,收集嵌套node_modules文件夾和多深的列表他們被埋在項目的根源之中。

  • 移動每個嵌套node_modules文件夾的內容到主node_modules文件夾,編輯每個.js文件,使得沒有引用出現的require()電話。

  • 處理重複的依賴

如果不出意外,它將使一個有趣的實驗的多個版本。你們有什麼感想?我可能遇到什麼潛在的問題?

回答

0

fenestratenpm-flattenflatten-packagesnpm dedupemulti-stage-installs

this StackOverflow question引述薩姆米凱什:

NPM會默認添加重複數據刪除技術,在安裝時間。這比Node的模塊系統改變顯着更可行,但它仍然不是微不足道的,並且涉及很多對一些根深蒂固的模式的修改。

這是(最後)目前在npm的作品,名稱爲multi-stage-install,目標爲[email protected]npm開發鉛阿甘諾維爾是要花費一些時間在Windows上運行在新的一年,所以請不要在npm問題跟蹤創建窗口相關的問題< https://github.com/npm/npm/issues>

1

看看

npm dedupe 

套你的權利。

API文檔here

+0

我的服務器目錄中運行該命令[這個項目](https://github.com/angular-app/angular-app/tree/master/server)並且仍然能夠導航到真正長的'''C:\ ... \ example \''上面的路徑。 [Here](http://pastebin.com/u6UJfkuc)是控制檯輸出(一些衝突)。 – mjhasbach

+0

不幸的。值得一試。你可以在[這個SO問題]上找到一些其他的想法(http://stackoverflow.com/questions/13318364/how-to-deploy-node-js-application-with-deep-node-modules-structure-on - 窗口),我覺得我在這個問題上又看到了另一個。如果我再次找到它,將會發布。 –

+0

無論如何感謝您的答案(我不知道'''npm dedupe''')和那個鏈接。這聽起來像@blesh有一個類似的想法,我上面的建議。 – mjhasbach