设置node.js REPL模块路径

设置node.js REPL模块路径,node.js,npm,Node.js,Npm,我不知道如何将路径添加到Node.js安装(Mac OS X上的v.0.4.7)。我已经安装了npm,它将全局安装到/usr/local/lib/node_模块。然而,当我安装npm时,它并没有通知节点它选择将全局模块放在哪里(应该放在哪里?)。现在,当我在命令行模式下使用Node时,我不能简单地require()我的全局安装模块。所以,我想知道是否有某种节点配置文件或环境变量,我可以在其中添加我的全局npm模块安装路径 我知道,当我在节点的命令行中时,我可以将其添加到require.path数

我不知道如何将路径添加到Node.js安装(Mac OS X上的v.0.4.7)。我已经安装了npm,它将全局安装到
/usr/local/lib/node_模块
。然而,当我安装npm时,它并没有通知节点它选择将全局模块放在哪里(应该放在哪里?)。现在,当我在命令行模式下使用Node时,我不能简单地
require()
我的全局安装模块。所以,我想知道是否有某种节点配置文件或环境变量,我可以在其中添加我的全局npm模块安装路径


我知道,当我在节点的命令行中时,我可以将其添加到
require.path
数组中,但我想一次性地添加这个全局模块文件夹,这样当我从命令行中搜索
require()
模块时,节点将始终在该目录中搜索模块。提前感谢您提供的有关使npm和节点共存的帮助和建议

该死,我误解了。很抱歉

回到主题,您可以将这两行放在
set repl path.js

require.paths.unshift('/usr/lib/node_modules');
require("repl").start();
然后执行
node set repl path.js
您将得到一个路径已经设置好的repl。您可以编写一个简单的bash脚本或设置shell别名,以便只需键入
node repl
或类似的内容

对于NPM1.x,您应该使用本地安装,而对于提供命令行实用程序的模块,应该保留全局安装

如果您确实希望模块
foo
的全局安装,那么在您的模块文件夹中发出
npm链接foo
。现在,您可以在模块中
require(“foo”)

最佳做法是使用本地安装


请参阅nodejs博客。

好的,我知道了。结合来自的信息,在检查模块时,Node显然会检查Node_PATH环境变量。为此,我执行了以下操作:

echo 'export NODE_PATH="'$(npm root -g)'"' >> ~/.bashrc

这将设置npm全局安装文件夹的节点路径。

全局安装程序包(通常由命令行使用)

npm安装--全局程序包\u名称

在我的例子中,我想安装
jslint
作为命令行工具。所以我跑了

npm安装——全局jslint

这会将包安装到

/usr/local/lib/node\u模块/

那么为什么要这么做呢?如果在项目中专门使用包,则不应全局安装包

有关更多信息,请查看帮助页面

npm帮助安装

npm全球帮助

我也在npm的
npm

中找到了它,作为对此的答复:

您可以将其添加到.bashrc中,以便在运行repl时仅设置NODE_PATH,因为需要全局模块是一种反模式

node() {
  if (( $# == 0 )); then
    NODE_PATH=$(npm root -g) command node
  else
    command node "$@"
  fi
}
当没有参数传递给节点时,它设置节点路径。因此它不能与类似
node-i
的东西一起工作。您必须添加更多的参数检查,以覆盖repl运行的所有情况

这将使repl始终设置节点路径。如果希望能够选择是否运行repl或带有全局模块的脚本,可以将其添加到.bashrc中

node_global() {
  NODE_PATH=$(npm root -g) node "$@"
}

然后运行node_global。我选择了第二个选项。

您使用的是什么版本的npm?您在命令行上需要如何设置?您是否正在使用
require(“/模块”)
要求(“模块”)?我正在使用NPM1.0.5。我在节点命令行中使用了
require('module')
。我使用
-g
选项安装了这些模块,它们转到了全局模块目录,但由于某种原因,Node不知道这个目录……我已经阅读了npm文档,并且知道全局与本地安装。这并没有告诉我有关设置node.js路径的任何信息。+1。谢谢,rjack,这是一个很好的解决办法。但您不知道节点在何处存储用于搜索模块的路径?缺点是这会给您带来旧的“一切都是全局的”行为,该行为被描述为npm 1.0(当节点未在repl中启动时,全局模块也会添加到路径)。另一种方法是使用一个专用于节点repl会话的文件夹,并在本地安装所有需要的模块。然后,当我想使用repl时,我可以简单地将它cd到该文件夹中。它如何给出“一切都是全局的”行为?因为您将全局模块路径添加到了.bashrc中,所有
节点
调用都将使用它。我宁愿将全局行为限制在交互式(repl)会话中。那么您回答的是哪一个问题,是这个问题,还是您链接的问题?我链接的问题与这个问题相同。我没有足够的代表对这个答案发表评论。我指的是Giacomo提到的当不在repl中时能够要求全局模块的问题。我的答案与Giacomo的答案相似,但不需要额外的文件。这有点像是两个答案的合并,所以你应该在这里提供答案中与这个问题相关的部分,然后提供答案中与另一个问题相关的部分。即使一个答案已经被接受了,但这并不意味着你不能再添加一个。(此外,另一个问题的提问者还没有收到关于这个新答案的通知,所以当它出现在这里时,对他们没有什么帮助。)