3

我决定尝试学习 DerbyJS,这也是我第一次接触 NodeJS。

我使用derby new foo. 这也会创建一个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,我得到“找不到模块'express'”

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?

4

2 回答 2

3

查看 npm常见问题解答的链接。基本上,您想使用 npm-link 命令。浏览您的 package.json 并为每个依赖项执行一个sudo npm install -g <packagename>. 然后将该包链接到您的本地项目(请参阅 参考资料npm help link)。

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

于 2013-10-02T16:26:14.740 回答
3

如果您想将项目保留在 Dropbox 中,我会在 Dropbox 中创建一个裸 git 存储库并将其用作项目的上游存储库。

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

于 2013-10-02T16:52:47.517 回答