2013-10-02 41 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

相关问题