Published on

node.js全局和本地安装的区别

Authors
  • Name
    Twitter

在 Node.js 的 npmnpx 工具中,“全局”和“本地”是用来描述包的安装位置和作用范围的。它们的主要区别如下:

1. 本地安装 (Local Installation)

  • 定义:将包安装在项目的当前目录下,具体来说是放置在项目目录下的 node_modules 文件夹中。
  • 特点
    • 作用范围:仅限于当前项目。
    • 依赖管理:安装的信息会记录在 package.jsondependenciesdevDependencies 字段中。
    • 命令可用性:本地安装的 CLI 工具默认不能直接从命令行运行(除非使用 npx 或在项目中设置路径)。
  • 适用场景:项目依赖,例如 expresslodash 等需要在代码中使用的库。

示例

# 本地安装 lodash
npm install lodash

# 本地安装 eslint,作为开发依赖
npm install eslint --save-dev

本地安装后的文件结构:

my-project/
├── node_modules/
│   └── lodash/
├── package.json
├── package-lock.json

2. 全局安装 (Global Installation)

  • 定义:将包安装在系统的全局环境中,使其可以在任何地方直接使用。
  • 特点
    • 作用范围:对系统中的所有项目都可用。
    • 命令可用性:全局安装的 CLI 工具可以直接通过命令行运行。
    • 依赖管理:不会记录在项目的 package.json 中,适用于工具而非项目依赖。
  • 适用场景:全局命令行工具,例如 typescript (tsc)、http-servernpm 本身。

示例

# 全局安装 TypeScript
npm install -g typescript

# 安装后可直接使用 tsc 命令
tsc --init

全局安装后的文件位置:

  • macOS/Linux/usr/local/lib/node_modules/ 或用户目录下的 .npm-global
  • Windows:通常是 %AppData%\npm\node_modules\

可以通过以下命令查看全局安装目录:

npm root -g

3. 全局安装和本地安装的核心差异

特性本地安装全局安装
安装位置当前项目的 node_modules系统的全局目录(如 /usr/local
作用范围仅限于当前项目对所有项目都可用
是否记录依赖记录在项目的 package.json不记录在 package.json
命令行工具使用默认不能直接用命令行运行可直接运行
典型用途项目依赖或项目级 CLI通用命令行工具

4. 如何选择全局或本地?

  • 本地安装

    • 对于项目依赖库和项目相关工具,通常优先本地安装。
    • 例如:reactnexteslinttypescript
  • 全局安装

    • 如果你希望在任何目录里都能直接调用某个通用 CLI,可以考虑全局安装。
    • 例如:http-server 这类和具体项目耦合较弱的工具。

特殊情况:

很多 CLI 工具其实更适合通过 npx 临时运行,这样既不用全局安装,也不会污染项目依赖,例如:

# 临时使用 create-react-app
npx create-react-app my-app

实际建议

在现代前端/Node.js 项目里,一个比较稳妥的经验是:

  • 项目依赖和项目 CLI,优先本地安装
  • 偶尔使用的脚手架工具,优先 npx
  • 只有真正需要“全局可用”的工具,再考虑全局安装

这样更有利于版本一致性,也更方便团队协作。