这实际上是设计使然。来自Node.js 博客:
一般来说,经验法则是:
1.如果你正在安装你想在你的程序中使用的东西,使用 require('whatever'),然后在本地安装它,在你的项目的根目录下。
2.如果您要在 shell、命令行或其他地方安装要在 shell 中使用的东西,请全局安装它,以便它的二进制文件最终出现在您的 PATH 环境变量中。
在本地安装项目依赖项对您来说很重要,因为您无法保证在您的机器上全局安装的内容可能在部署机器上可用。诚然,您可以管理两台机器,或者它们实际上可能是同一台机器,但这种情况永远无法保证。
此外,您拥有依赖特定版本的 npm 的项目并不罕见,您可能已经为全局安装了更新,从而破坏了需要旧版本的项目。隔离是保持项目正常运行的关键。
如果您真的只需要维护一份副本,则可以使用符号链接。npm link globalnpm
全局安装它,然后 npm link coffee-script 或 npm link express (如果您在支持符号链接的平台上)。然后您只需要更新全局副本即可更新所有符号链接。
请注意,符号链接选项实际上只与手动初始化的项目相关;像 Yeoman 这样的生成器将始终使用本地生成器,因为它们遵循谷物。