2011-02-27 83 views

回答

4

我相信关心的是它可以在运行时反复修改,而不是仅仅设置。这显然可能会造成混乱,并导致一些非常奇怪的错误。另外,如果单个软件包修改路径,则结果将全局应用,这非常糟糕,并且与节点的模块化特性背道而驰。

如果您有自己的几个库路径,最好的解决方案是在启动节点之前设置NODE_PATH环境变量。然后,节点在启动时自动将其选中并自动应用。

+2

这将需要一个额外的外部脚本来运行该应用程序,这是不洁的。 – 2012-01-17 22:15:53

+1

为了防止任何人在这个答案中绊倒,现在这个问题在节点和npm如何朝着沙盒开发方向发展方面已经有点学术了。 – leebriggs 2012-03-13 21:18:07

+2

@leebriggs你能解释一下你最近的评论吗? – 2015-08-05 11:26:22

1

我把相关车型在同一个目录或子目录和负载使用:

var x = require('./mod/x'); 

如果它是一个外部模块,我使用NPM是正确放模块在NODE_PATH它安装。

我从来没有改变require.paths。

+0

对于我的用例,我想在本地'deps /'文件夹中保留特定版本(可能已修补)的本地副本。也许修改NODE_PATH是正确的方法,但这意味着要编写一个启动脚本... – nornagon 2011-03-02 03:05:40

+1

您不需要使用相对路径的模块:var x = require('../ deps/c'); ?我从来没有这样做,但看到了某个地方。 – Carlosedp 2011-03-02 12:58:02

+0

@nornagon我知道这是旧的,但我发现最好的解决方案是将符号链接添加到'node_modules'指向'deps /'目录中的每个模块。然后你可以参考它们,就好像它们是普通模块一样。确保为每个添加的'node_modules'符号链接更新'.gitignore',以便将符号链接检入源代码管理。这是hacky,但它的作品。 – vaughan 2013-03-30 07:35:47

1

看看https://github.com/patrick-steele-idem/app-module-path-node;您可以将目录添加到顶级中的require语句,而不影响子模块的路径。

+0

我一直在使用这个模块。它工作得很好。 – vaughan 2015-06-10 17:23:20

+0

如果你只需要做一个快速入门,你可以在另一个函数中简单地包装require('module')。Module._nodeModulePaths。请记住,以这种方式改变模块路径仍然是不好的做法。 – 2017-01-24 15:21:49

相关问题