20

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

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

4

4 回答 4

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 的全局安装文件夹。

于 2011-05-07T20:45:53.507 回答
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:全局与本地安装。

于 2011-05-06T08:50:52.380 回答
2

To install a package globally (typically used by the command line)

npm install --global PACKAGE_NAME

In my case I wanted to install jslint as a command line tool. So I ran

npm install --global jslint

This installs the package to

/usr/local/lib/node_modules/

So why all of this? You shouldn't be installing packages globally if they're being used specifically in a project.

For more information checkout the help pages.

npm help install

npm help global

I also found it in the npm FAQ

于 2011-06-18T00:55:29.997 回答
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。我选择了第二个选项。

于 2017-01-05T22:28:40.097 回答