【发布时间】:2025-12-21 17:35:11
【问题描述】:
npm 文档是这样说的:
- 如果您正在安装要在程序中使用的内容,请使用 require('whatever'),然后将其安装在本地,在项目的根目录下。
- 如果您要在 shell 中安装要使用的东西,请在命令行或 一些东西,全局安装它,以便它的二进制文件最终出现在您的 PATH 环境变量中。
我目前正在编写 --- 或者至少正在尝试编写 --- 一个真正的 node 命令行程序,旨在从 shell 中使用。因此,根据上述情况,我的依赖项应该安装为全局模块。
我如何真正使用在 node 中使用 npm 安装的全局模块?当然,调用 require() 不起作用,因为默认情况下 npm 全局模块目录 (/usr/local/lib/node_modules) 不在路径上。我可以通过将其显式添加到程序顶部的路径来使其工作,但这是一个非常糟糕的解决方案,因为它不可移植——它需要知道 npm 的全局模块目录在任何给定系统上的位置。
只是为了让生活更加糟糕,我通过 dpkg 安装了一些全局模块。这些已经放在/usr/lib/nodejs 中,它们可以正常工作。这让我感到困惑,因为如果不应该将全局模块用于普通应用程序,我不希望它们都不会在路径上;否则我希望他们都在路上,并要求全局模块在任何地方都可以工作。有一个但没有另一个似乎很奇怪。这是怎么回事?
更新:我应该指出,这个程序只是一个脚本,顶部有#!/usr/bin/env nodejs;它不是一个正式的节点模块,这对于如此微不足道的事情来说太过分了。由于 Debian 模块在这样的脚本中都是必需的,对我来说 npm 的全局模块也应该是必需的似乎是明智的,但我感觉这是 Debian 主义......
【问题讨论】:
标签: node.js