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. 全局 vs 本地 对比

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

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

  • 本地安装

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

    • 如果需要频繁使用某个命令行工具,或该工具与特定项目无关,可以全局安装。
    • 例如:typescripteslinthttp-server

特殊情况:

有些工具可以通过 npx 临时运行,这样既避免全局安装,又无需本地安装,例如:

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

总结:**本地安装用于项目,**方便依赖管理和版本控制;**全局安装用于工具,**方便全局命令使用。