Nodejs 关于npm -g install

Nodejs 关于npm -g install

npm -g install eventproxy

表示用全局模式安装包,但是不代表你可以在任何地方require到这个包,在Linux下它其实把包安装到/usr/local/lib/node_modules下,然后通过软连接的方式把包中bin目录下的可执行文件链接到/usr/local/bin下面(和node一个目录)。 但是我希望能够在任何地方都能够require这个包,我的做法是修改/etc/profile,在文件尾加上一行

export NODEPATH="NODEPATH:/usr/local/lib/node_modules"

然后

source /etc/profile

可这依然达不到我要的效果,请问应该怎么做才能把包安装到全局?


7 回复

Node.js 关于 npm -g install

在使用 Node.js 时,有时我们会需要安装一些全局的包来方便我们进行开发或管理项目。npm -g install 命令可以用来安装这些全局包。本文将详细讲解如何正确地安装全局包,并解决在全局范围内找不到包的问题。

全局安装包

当你使用 npm -g install 安装包时,实际上是在全局范围内安装该包。例如:

npm -g install eventproxy

这条命令会将 eventproxy 包安装到全局路径下,通常是在 /usr/local/lib/node_modules/ 目录中。同时,如果包中有可执行文件(如脚本),npm 会将其链接到 /usr/local/bin/ 目录,以便你在终端中直接调用这些命令。

配置环境变量

尽管全局安装了包,但有时你可能会遇到无法在任何地方 require 这个包的问题。这通常是因为 Node.js 的模块搜索路径没有包含全局安装的包路径。

你可以通过设置 NODE_PATH 环境变量来解决这个问题。NODE_PATH 是 Node.js 查找模块的路径列表。你可以将全局安装的包路径添加到 NODE_PATH 中。以下是具体步骤:

  1. 编辑环境配置文件:打开你的 .profile.bashrc 文件(取决于你的系统),并添加以下行:

    export NODE_PATH="$NODE_PATH:/usr/local/lib/node_modules"
    
  2. 应用更改:保存文件后,运行以下命令使更改生效:

    source ~/.profile
    # 或者
    source ~/.bashrc
    

使用 nvm 管理 Node.js 版本

如果你使用 nvm(Node Version Manager)来管理不同的 Node.js 版本,那么全局包的安装路径可能会有所不同。在这种情况下,你需要根据当前使用的 Node.js 版本调整 NODE_PATH

例如,如果你当前使用的是 nvm 管理的版本 v14.15.0,则全局包可能安装在 ~/.nvm/versions/node/v14.15.0/lib/node_modules 目录下。你可以这样设置 NODE_PATH

export NODE_PATH="$NODE_PATH:~/.nvm/versions/node/v14.15.0/lib/node_modules"

示例代码

假设你已经全局安装了 eventproxy 包,并且想在你的项目中使用它。你可以这样做:

const EventProxy = require('eventproxy');
const ep = new EventProxy();

ep.after('allData', 3, function(data1, data2, data3) {
    console.log(data1, data2, data3);
});

// 模拟异步数据获取
setTimeout(() => ep.emit('allData', 'data1'), 1000);
setTimeout(() => ep.emit('allData', 'data2'), 2000);
setTimeout(() => ep.emit('allData', 'data3'), 3000);

这段代码展示了如何在项目中使用全局安装的 eventproxy 包。

总结

通过正确配置 NODE_PATH,你可以确保全局安装的包可以在任何地方被 require 到。如果你使用 nvm,记得根据当前使用的 Node.js 版本调整 NODE_PATH。希望这些信息能帮助你更好地管理和使用全局包。


NODE_PATH

模块引用…不建议全局…

全局安装一般都是为了引用shell…

开发,还是按照CMD 规范来构建项目结构吧…

我怎么没看到不建议这样的,规范在哪里看?

要在全局范围内安装 npm 包,并确保可以在任何地方 require 这个包,你需要确保 Node.js 和 npm 的环境变量配置正确。以下是具体步骤:

  1. 使用 -g 参数安装全局包: 使用 npm install -g <package-name> 命令来全局安装包。例如:

    npm install -g eventproxy
    
  2. 检查全局包的安装路径: 你可以通过以下命令查看全局安装包的位置:

    npm root -g
    

    默认情况下,全局包会被安装在 $(npm config get prefix)/lib/node_modules 目录下。

  3. 设置 NODE_PATH 环境变量: 如果你想让 Node.js 在启动时自动搜索全局安装的包,可以设置 NODE_PATH 环境变量。通常情况下,不需要手动设置 NODE_PATH,因为 npm 安装全局包时会自动处理这个问题。

    如果你确实需要设置 NODE_PATH,可以将以下内容添加到你的 .bashrc.zshrc 文件中(假设你使用的是 bash 或 zsh):

    export NODE_PATH="/usr/local/lib/node_modules:$NODE_PATH"
    

    然后运行 source ~/.bashrcsource ~/.zshrc 使更改生效。

  4. 验证安装: 安装完成后,你可以通过以下命令验证包是否可用:

    node -e "require('eventproxy')"
    

    如果没有错误信息,则说明全局安装成功并且可以在任何地方 require 这个包了。

总结来说,使用 npm install -g <package-name> 命令即可全局安装包,大部分情况下不需要额外配置 NODE_PATH。如果需要,可以通过设置环境变量来确保全局包被正确加载。

回到顶部