set node.js REPL模块路径

时间:2011-05-05 05:19:15

标签: node.js npm

我无法弄清楚如何为我的Node.js安装添加路径(Mac OS X上的v.0.4.7)。我安装了npm,它全局安装到/usr/local/lib/node_modules。但是,当我安装npm时,它没有通知Node它选择放置全局模块的位置(应该有吗?)。现在,当我在命令行模式下使用Node时,我不能简单地require()我全局安装的模块。所以,我想知道是否有某种Node配置文件或环境变量,我可以添加我的全局npm模块安装路径?

我知道当我在Node的命令行中时,我可以将它添加到require.paths数组中,但我想一劳永逸地添加这个全局模块文件夹,以便Node始终搜索该目录从命令行我require()时的模块。提前感谢有关使npm和Node共存的任何帮助和指示!

4 个答案:

答案 0 :(得分:18)

好的,我明白了。结合来自http://nodejs.org/docs/v0.4.7/api/modules.html#file_Moduleshttps://github.com/isaacs/npm/blob/master/doc/faq.md#readme的信息,很明显Node在检查模块时会检查NODE_PATH环境变量。为此,我做了以下几点:

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

这会将NODE_PATH设置为npm的全局安装文件夹。

答案 1 :(得分:4)

该死的,我误解了。对不起。

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

require.paths.unshift('/usr/lib/node_modules');
require("repl").start();

然后执行node set-repl-paths.js您将拥有已设置路径的repl。您可以编写一个简单的bash脚本或设置shell别名,这样您就可以只输入node-repl或类似内容。

使用npm 1.x,您应该使用本地安装,并为提供命令行实用程序的模块保留全局安装。

如果您确实需要模块foo的全局安装,那么在您的模块文件夹中发出npm link foo。现在,您可以在模块中require("foo")

最佳做法是使用本地安装。

请参阅nodejs博客上的npm 1.0: Global vs Local installation

答案 2 :(得分:2)

全局安装软件包(通常由命令行使用)

npm install --global PACKAGE_NAME

在我的情况下,我想安装jslint作为命令行工具。所以我跑了

npm install --global jslint

这会将软件包安装到

/usr/local/lib/node_modules/

那么为什么这一切呢?如果在项目中专门使用它们,则不应全局安装包。

有关详细信息,请查看帮助页面。

npm help install

npm help global

我也在npm FAQ

中找到了它

答案 3 :(得分:1)

回复此事: https://stackoverflow.com/a/5923898/7381355

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

node() {
  if (( $# == 0 )); then
    NODE_PATH=$(npm root -g) command node
  else
    command node "$@"
  fi
}

当没有参数传递给节点时,它设置NODE_PATH。所以它不适用于像node -i这样的东西。您必须添加更多参数检查以涵盖运行repl的所有情况。

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

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

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