设置node.js REPL模块路径
我不知道如何将路径添加到Node.js安装(Mac OS X上的v.0.4.7)。我已经安装了npm,它将全局安装到设置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数
/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的答案相似,但不需要额外的文件。这有点像是两个答案的合并,所以你应该在这里提供答案中与这个问题相关的部分,然后提供答案中与另一个问题相关的部分。即使一个答案已经被接受了,但这并不意味着你不能再添加一个。(此外,另一个问题的提问者还没有收到关于这个新答案的通知,所以当它出现在这里时,对他们没有什么帮助。)