npm使用的环境变量及其用法解读

 更新时间:2025年10月23日 09:59:18   作者:赵民勇  
这篇文章主要介绍了npm使用的环境变量及其用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

了解 npm 的环境变量能让你更自如地控制和定制 npm 的行为。

下面我将为你介绍一些常用的 npm 环境变量及其用法,并提供一些使用上的建议。

npm 环境变量详解与使用指南

常用 npm 环境变量概览

下表汇总了一些常用的 npm 环境变量及其典型用途:

环境变量名作用简介用法示例
npm_config_cache设置 npm 的缓存目录路径npm_config_cache=/path/to/cache npm install
npm_config_offline启用离线模式,npm 不会尝试网络请求npm_config_offline=true npm install
NODE_PATH告诉 Node.js 在哪些额外目录查找模块export NODE_PATH=/path/to/modules
npm_package_name当前项目的名称 (来自 package.json)echo $npm_package_name
npm_package_version当前项目的版本 (来自 package.json)echo $npm_package_version
npm_config_registry设置 npm 包仓库的地址npm_config_registry=https://registry.npmmirror.com npm install
npm_lifecycle_event当前正在运行的 npm 脚本名称echo $npm_lifecycle_event

核心环境变量详解

1.npm_config_*变量

npm 的运行行为可以通过 npm_config_ 开头的环境变量进行配置。

设置方式与优先级:npm 获取配置的顺序从高到低是:命令行标志 (Command Line Flags) > 环境变量 (Environment Variables) > npmrc 文件 > 默认配置。这意味着通过命令行参数设置的选项会覆盖环境变量。

npm_config_cache:这个变量用于覆盖 npm 默认的缓存目录路径。这在离线开发(你需要指定一个预先准备好的缓存目录)或希望将缓存放到特定磁盘(如空间更大的数据盘或更快的 SSD)时非常有用。使用时通常需配合 --offline 参数:

# 临时设置缓存目录并启用离线模式
npm_config_cache="/opt/offline-resources/npm-cache" npm install --offline --optional=false

npm_config_offline:将其设置为 true 会强制 npm 在离线模式下工作,仅使用本地缓存,不尝试任何网络连接。等同于在命令后添加 --offline 参数。

其他常用 npm_config_ 变量

  • npm_config_registry:设置 npm 包的下载源。
  • npm_config_prefix:设置全局安装的根目录。

2.npm_package_*变量

npm 会自动将你项目的 package.json 文件中的字段转换为以 npm_package_ 开头的环境变量2。

例如,package.json 中的 name 和 version 字段可以通过 npm_package_name 和 npm_package_version 访问。

这在 npm scripts 中非常有用,可以让脚本动态地获取项目信息:

{
  "scripts": {
    "echo:name": "echo $npm_package_name",
    "echo:version": "echo $npm_package_version",
    "archive:coverage": "mkdir -p coverage_archive/$npm_package_version && cp -r coverage/* coverage_archive/$npm_package_version/"
  }
}

3.NODE_PATH

这是一个由 Node.js 本身识别的环境变量,而非 npm 专属。它用于告诉 Node.js 除了当前项目的 node_modules 之外,还在哪些额外的目录中查找模块。

注意:从 Node.js v6 开始,NODE_PATH 被视为过时 (deprecated),因为 Node.js 的模块解析算法已经非常完善。通常,更推荐使用项目本地的 node_modules 或通过 npm link 进行开发。但在一些遗留项目或特殊环境中可能仍会用到。

4. 其他实用变量

npm_lifecycle_event:表示当前正在执行的 npm script 的名称(例如 installstarttest等)。这在编写复杂的脚本时,可以让你根据正在运行的生命周期事件执行不同的操作。

如何查看所有环境变量

要查看当前 npm 运行时可用的所有环境变量(这是一个很长的列表),可以在你的项目目录下运行:

npm run env

如果你只想查看与当前 package.json 内容相关的变量,可以使用:

npm run env | grep npm_package

如何使用环境变量

在 npm scripts 中使用

在 package.json 的 scripts 字段中,你可以直接通过 $变量名(Unix-like系统)或 %变量名%(Windows)来引用环境变量:

{
  "scripts": {
    "dev": "NODE_ENV=development node app.js",
    "test": "echo \"Testing package: $npm_package_name@$npm_package_version\"",
    "serve:coverage": "http-server coverage_archive/$npm_package_version -p $npm_package_config_port"
  },
  "config": {
    "port": 3000
  }
}

上面的例子中,npm_package_config_port 来自于 package.json 中 config 对象下的 port 字段。

在命令行中临时设置

你可以在执行命令前临时设置环境变量,这只对当前命令生效:

# Unix-like 系统 (Linux, macOS)
npm_config_cache=/tmp/cache npm install

# Windows (Command Prompt)
set npm_config_cache=C:\temp\cache && npm install

# Windows (PowerShell)
$env:npm_config_cache='C:\temp\cache'; npm install

在系统中持久化设置

如果你希望某个环境变量永久生效,可以将其添加到你的 shell 配置文件中(如 ~/.bashrc~/.zshrc~/.bash_profile):

# 将以下内容添加到 ~/.bashrc 或类似文件末尾
export npm_config_cache=/home/yourusername/.npm-offline-cache

然后运行 source ~/.bashrc 使其立即生效,或重新打开终端窗口。

也可以在系统的环境变量设置界面(Windows)或全局配置文件(如 ~/.npmrc)中进行设置。

重要注意事项

  • 变量名大小写:大多数 npm_config_ 环境变量不区分大小写,但为了清晰和一致性,通常使用小写。NODE_PATH 等传统环境变量通常大写。
  • 配置优先级:记住命令行参数 > 环境变量 > npmrc 文件的优先级顺序。如果你在多个地方设置了同一个配置,优先级高的会覆盖优先级低的。
  • 离线模式需缓存完整:使用 npm_config_offline=true 或 --offline 时,务必确保所有依赖包已经存在于缓存中,否则安装会失败。
  • 缓存目录权限:如果你自定义了 npm_config_cache 目录,请确保运行 npm 的用户对该目录有读写权限
  • NODE_PATH 的过时性:如前所述,优先使用项目本地的 node_modules,而不是依赖 NODE_PATH,除非你有非常特殊的理由。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 吐槽一下我所了解的Node.js

    吐槽一下我所了解的Node.js

    用了一年多 Node.js, 现在已经是 Node.js 的脑残粉了,这篇日志比较杂,算是我对 Node.js 方方面面的一个集中吐槽。
    2014-10-10
  • nvm安装方法以及安装后node不能使用解决

    nvm安装方法以及安装后node不能使用解决

    在我们的日常开发中经常会遇到这种情况,手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的NodeJS运行环境,nvm应运而生,这篇文章主要给大家介绍了关于nvm安装方法以及安装后node不能使用解决的相关资料,需要的朋友可以参考下
    2023-04-04
  • Node.js 深度调试方法解析

    Node.js 深度调试方法解析

    这篇文章主要介绍了Node.js 深度调试方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于Node实现可以操作MySQL的接口

    基于Node实现可以操作MySQL的接口

    这篇文章主要介绍了用Node写个可以操作MySQL的接口,以前也用Node写过接口,但不涉及数据库操作,而我们发现,后端写接口,基本都绕不开数据库操作,感觉不写一个能操作数据库的接口,就不算真正意义上学会了写接口,那我们今天就学习一下,如何写一个可以操作数据库的接口
    2024-05-05
  • 浅谈node node-sass sass-loader版本对应问题

    浅谈node node-sass sass-loader版本对应问题

    本文主要介绍了浅谈node node-sass sass-loader版本对应问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • nodejs log4js 使用详解

    nodejs log4js 使用详解

    这篇文章主要介绍了nodejs log4js 使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • node.js 模块和其下载资源的镜像设置的方法

    node.js 模块和其下载资源的镜像设置的方法

    这篇文章主要介绍了node.js 模块和其下载资源的镜像设置的方法,在设置淘宝镜像共有三种方法,每种方法通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-09-09
  • Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址

    Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址

    这篇文章主要介绍了Node.JS在命令行中检查Chrome浏览器是否安装,并打开指定网址,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • node连接redis的方法实现

    node连接redis的方法实现

    本文主要介绍了node连接redis的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 用C/C++来实现 Node.js 的模块(一)

    用C/C++来实现 Node.js 的模块(一)

    这篇文章的主要内容其实简而言之就是——用C/C++来实现 Node.js 的模块,非常的不错,有需要的朋友可以参考下
    2014-09-09

最新评论