全局安装项目的依赖项并在没有`node_modules /`的情况下运行项目 - 如何?

时间:2013-10-02 16:11:23

标签: node.js npm derbyjs

我决定尝试学习DerbyJS,这是我第一次认识NodeJS。

我使用derby new foo创建一个新的Node / Derby项目。这还会创建一个node_modules/文件夹,其中包含项目所依赖的所有包的副本。

空白Derby项目的node_modules/子目段大144 MB,包含12967个文件(sic!)。作为熟悉Ruby的RubyGems,RVM和Bundler的人,我觉得这很疯狂。我无法表达它是多么的错误(实际上我已经对这种疯狂进行了一些坚实的论证,但StackOverflow不是一个辩论的地方)。

我认为npm的-g旗帜对我有帮助。我告诉自己,我可以全局安装所有软件包。所以我做了:

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

现在我的项目重152 KB,包含24个文件。现在这是合理的。

但是我无法运行它。 当我npm start时,我会收到“无法找到模块'表达'”

lolmaus@sandy:~/hello_derby2$ npm start

> hello_derby2@0.0.0 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)

所以问题是:如何将项目的依赖项安装到中央本地存储库并运行项目,而不是从我的Dropbox帐户中击败f#@ k?

2 个答案:

答案 0 :(得分:3)

点击此链接到npm&#39; s faq。基本上,您想使用npm-link命令。浏览package.json,并为每个依赖项执行sudo npm install -g <packagename>。然后将该包链接到您的本地项目(请参阅npm help link)。

这不是默认行为的原因是管理多个项目的依赖关系是一件令人头疼的事。假设空间便宜(而且是);拥有依赖关系的副本被认为是支付更少包版本冲突的低价格。

答案 1 :(得分:3)

如果你想让你的项目保留在Dropbox中,我会在Dropbox中创建一个简单的git repo并将其用作你项目的上游回购。

从非Dropbox文件夹中运行您的项目,并将node_modules文件夹添加到.gitignore