2013-10-02 64 views
3

我決定嘗試學習DerbyJS,這也是我第一次瞭解NodeJS。在全局安裝項目的依賴關係,並在沒有`node_modules /`的情況下運行項目 - 如何?

我使用derby new foo創建了一個新的Node/Derby項目。這也創建了一個node_modules/文件夾,其中包含項目依賴的所有軟件包的副本。

空白Derby項目的node_modules/子目錄大小爲144 MB,包含12967個文件(原文如此!)。作爲一個熟悉Ruby的RubyGems,RVM和Bundler的人,我覺得這很瘋狂。我無法表達它是多麼的錯誤(實際上我已經有了一些反對這種瘋狂的堅實論證,但是StackOverflow並不是一個可供辯論的地方)。

我以爲npm的-g國旗會幫助我。我告訴自己,我可以在全球安裝所有軟件包。所以我做了:

derby new -n foo 
cd foo 
sudo npm install -g 

現在我的項目重152 KB,包含24個文件。現在這是合理的。

但我無法運行它。 當我做npm start,我得到「無法找到模塊‘表達’」

[email protected]:~/hello_derby2$ npm start 

> [email protected] start /home/lolmaus/hello_derby2 
> node server.js 

Master pid 29884 

module.js:340 
    throw err; 
    ^
Error: Cannot find module 'express' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (/home/lolmaus/hello_derby2/lib/server/index.js:1:77) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 

所以,問題是:如何安裝項目的依賴關係到中央本地資源庫和運行項目沒有擊敗F#從我的Dropbox帳戶中註銷@k?

+1

不要對抗系統。在本地安裝依賴關係是一件非常好的事情,[它的完成有很好的理由](https://npmjs.org/doc/faq.html#Why-can-t-npm-just-put-everything-in-one-地點樣其他包經理)。 – josh3736

回答

3

看看這個鏈接到npm的faq。基本上,你想使用npm-link命令。遍歷你的package.json,併爲每個依賴項做一個sudo npm install -g <packagename>。然後將該軟件包鏈接到您的本地項目(請參閱npm help link)。

這不是默認行爲的原因是管理多個項目的依賴關係是一件頭痛的事。空間被認爲是便宜的(而且是)。具有副本的依賴關係被認爲是較低的價格來支付較少的包版本衝突。

+2

不幸的是Dropbox引用符號鏈接而不是隻是同步符號鏈接,所以這不能解決問題。 –

+1

這實際上是一個Dropbox特定的問題(雖然問題確實提到了它,但它更多地是關於節省空間)。我想你可以一起鞭打一個腳​​本,使Dropbox正常行爲/重新鏈接文件自動。 – AlexMA

+0

這是兩個軟件不能很好地發揮作用:)我一直在享受我的機器之間的自動和無痛同步現在,我不想放棄它!看起來我將不得不與Node協作。 –

3

如果您想讓您的項目保留在Dropbox中,我會在Dropbox中創建一個裸露的git倉庫,並將其用作您項目的上游倉庫。

將您的項目從非Dropbox文件夾中移出,並將node_modules文件夾添加到.gitignore

相關問題