如何修改npm的全局安装路径?

news2025/4/27 20:43:57

修改 npm 的全局安装路径可以通过以下步骤完成,确保全局包(使用 -g 安装的模块)和缓存文件存储到自定义路径。以下是详细步骤:

1. 创建自定义路径的目录

在目标路径下创建两个文件夹,分别用于存储全局模块和缓存文件:

2. 配置 npm 的全局路径和缓存路径

使用 npm config 命令修改全局安装路径和缓存路径:

# 设置全局模块的安装路径(prefix)
npm config set prefix "D:\soft\node_repository\node_global"

# 设置缓存路径(cache)
npm config set cache "D:\soft\node_repository\node_cache"

3. 验证配置是否生效

执行以下命令检查配置是否成功:

# 查看全局安装路径
npm config get prefix  

# 查看缓存路径
npm config get cache   

4. 配置环境变量(关键步骤)

为了让系统识别全局安装的命令(如 npm 全局包的可执行文件),需要将新路径添加到 环境变量 中:

⑴:添加 PATH 环境变量

Windows 操作步骤

右击此电脑 → 点击“属性” → “高级系统设置” → “环境变量”。

在“系统变量”中找到 Path 变量,点击“编辑”。

新增以下路径:

D:\soft\node_repository\node_global(全局模块的根目录)

D:\soft\node_repository\node_global\node_modules\.bin(全局模块的可执行文件目录)

点击确定保存。

⑵.(可选但推荐):设置 NODE_PATH

如果全局模块需要被 Node.js 项目直接引用,添加 NODE_PATH 环境变量:

  • 在“系统变量”中新建变量:
    • 变量名:NODE_PATH
    • 变量值:D:\soft\node_repository\node_global\node_modules

5. 测试配置

⑴ 安装一个全局包

npm install -g pm2  # 例如安装 pm2
  • 检查安装路径:D:\soft\node_repository\node_global\node_modules下应出现 pm2 目录。

⑵.验证命令是否生效

pm2 -v  # 应显示 pm2 的版本号

6. 其他可选配置(提升体验)

⑴ 设置淘宝镜像加速下载

npm config set registry https://registry.npmmirror.com

⑵.检查完整配置

npm config list  # 查看所有 npm 配置





prefix(全局路径)和 cache(缓存路径)的区别

(1) prefix(全局路径,如 D:\node_global

  • 存储内容:已安装的全局 npm 包的最终版本
  • 作用:存放通过 npm install -g 安装的完整包文件(如 node_modules 目录下的模块)和可执行命令(如 webpackpm2)。
  • 文件结构示例
    D:\node_global\
    ├── node_modules\
    │   ├── package1@1.0.0\
    │   ├── package2@2.3.1\
    │   └── ...
    └── node_modules\.bin\
        ├── executable1.exe
        └── executable2.sh

(2) cache(缓存路径,如 D:\node_cache

  • 存储内容:下载的包的原始压缩文件.tgz)和元数据(如哈希校验值、索引文件)。
  • 作用:临时存储下载的包,供后续安装时快速复用,避免重复下载。
  • 文件结构示例
    D:\node_cache\
    ├── _cacache\
    │   ├── content-v2\  # 存储原始 .tgz 包(二进制文件)
    │   ├── index-v5\    # 存储元数据(如包的哈希值、下载时间等)
    │   └── tmp\         # 临时文件
    └── ...其他配置文件

2. 为什么不会“下载两份”?

npm 的安装流程如下,不会重复下载包

  1. 下载阶段

    • 当执行 npm install -g package 时,npm 首先检查 cacheD:\node_cache)中是否有该包的压缩文件(.tgz)。
    • 如果没有,则从远程仓库(如 npmjs.com 或淘宝镜像)下载一次,并将压缩包存入 cache
    • 如果已有缓存,则直接使用已有的 .tgz 文件。
  2. 安装阶段

    • 从 cache 中的 .tgz 文件解压并安装到 prefixD:\node_global,生成可执行的模块和命令。
    • 同一个包的 .tgz 文件只会在 cache 中存储一份,而安装后的解压文件会存放到 prefix

3. 具体例子说明

假设你全局安装了 pm2

  • 缓存路径 D:\node_cache
    • 存储 pm2 的原始 .tgz 文件(如 pm2-5.3.0.tgz)和元数据。
  • 全局路径 D:\node_global
    • 存储解压后的 pm2 模块文件(如 node_modules/pm2)和可执行文件(如 pm2.cmd)。

关键点

  • .tgz 文件只存在于 cache,而解压后的文件存在于 prefix
  • 如果再次安装 pm2,npm 会直接从 cache 中读取 .tgz,无需重新下载,但会再次解压到 prefix(如果版本不同或需要更新)。

4. 为什么需要分开这两个路径?

  • 职责分离
    • cache 是临时存储区,用于加速安装。
    • prefix 是最终安装路径,存放可直接使用的模块和命令。
  • 灵活性
    • 可以将 cache 放在高速存储(如 SSD),prefix 放在大容量存储(如 HDD)。
    • 可以独立清理 cache(节省空间),而不会影响已安装的全局模块。

5. 总结

  • prefix:存放已安装的全局模块(长期保留)。
  • cache:存放下载的原始包文件(临时缓存)。
  • 不会重复下载:同一个包的 .tgz 文件只会在 cache 中存储一份,安装时仅解压到 prefix

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2344580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

巧用 Element - UI 实现图片上传按钮的智能隐藏

引言 在前端开发中,使用 Element - UI 组件库来构建用户界面是非常常见的操作。其中图片上传功能更是在许多项目中频繁出现,比如用户头像上传、商品图片上传等场景。有时候,我们会有这样的需求:当上传图片达到一定数量后&#xf…

从“拼凑”到“构建”:大语言模型系统设计指南!

你有没有试过在没有说明书的情况下组装宜家家具?那种手忙脚乱却又充满期待的感觉,和设计大语言模型(LLM)系统时如出一辙。如果没有一个清晰的计划,很容易陷入混乱。我曾经也一头扎进去,满心期待却又手足无措,被网上那些复杂的架构图搞得晕头转向。于是,我坐下来,把它们…

【数据结构与算法】从完全二叉树到堆再到优先队列

完全二叉树 CBT 设二叉树的深度为 h , 若非最底层的其他各层的节点数都达到最大个数 , 最底层 h 的所有节点都连续集中在左侧的二叉树叫做 完全二叉树 . 特点 对任意节点 , 其右分支下的叶子节点的最底层为 L , 则其左分支下的叶子节点的最低层一定是 L 或 L 1 .完全二叉树…

【Linux网络】构建类似XShell功能的TCP服务器

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

Spring Boot 配置源详解(完整版)

Spring Boot 配置源详解(完整版) 一、配置源加载顺序与优先级 配置源类型优先级顺序(从高到低)对应配置类/接口是否可覆盖典型文件/来源命令行参数(--keyvalue)1(最高)SimpleComman…

puppeteer注入浏览器指纹过CDP

一、背景 通过puppeteer爬取目标网站时,经常会被对方网站检测到,比如原生puppeteerCDP特征非常明显,另外指纹如果一直不变,也会引发风控 二、实现 通过以下几行代码即可轻松过大部分检测点,并且能够切换指纹&#x…

软件项目实施全流程及交付物清单

需求分析 -> 概要设计 -> 详细设计 -> 开发实现 -> 测试 -> 部署 -> 运维 一、确认项目目标、范围和团队成员 二、收集和分析客户需求,确定需求规格 三、制定详细的项目计划,包括时间表、资源计划、预算 四、系统架构设计&#xf…

【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的

HTTP与HTTPS全面对比及HTTPS加密流程详解 一、HTTP与HTTPS核心区别 特性HTTPHTTPS协议基础明文传输HTTP SSL/TLS加密层默认端口80443加密方式无加密混合加密(非对称对称)证书要求不需要需要CA颁发的数字证书安全性易被窃听、篡改、冒充防窃听、防篡改…

从梯度消失到百层网络:ResNet 是如何改变深度学习成为经典的?

自AlexNet赢得2012年ImageNet竞赛以来,每个新的获胜架构通常都会增加更多层数以降低错误率。一段时间内,增加层数确实有效,但随着网络深度的增加,深度学习中一个常见的问题——梯度消失或梯度爆炸开始出现。 梯度消失问题会导致梯…

Uni-App 多端电子合同开源项目介绍

项目概述 本项目是一款基于 uni-app框架开发的多端电子合同管理平台,旨在为企业及个人用户提供高效、安全、便捷的电子合同签署与管理服务。项目创新性地引入了 “证据链”与“非证据链”两种签署模式,满足不同场景下的签署需求,支持多种签署…

多语言笔记系列:共享数据

在笔记中共享数据(变量) 使用 .NET 交互式内核,可以在单个笔记本中以多种语言编写代码。为了利用每种语言的不同优势,您会发现在它们之间共享数据很有用。即一种语言的变量,可以在其它语言中使用。 默认情况下,.NET Interactive …

如何使用SeedProd创建无缝的WordPress维护页面

不管您刚接触 WordPress ,还是经验丰富的站长,SeedProd 都是创建网站维护页面的得力助手。通过SeedProd,您可以轻松创建一个与网站风格一致、功能齐全的维护页面,让您的用户在网站维护期间也能感受到您的专业与关怀。本文将为您提…

使用Python设置excel单元格的字体(font值)

一、前言 通过使用Python的openpyxl库,来操作excel单元格,设置单元格的字体,也就是font值。 把学习的过程分享给大家。大佬勿喷! 二、程序展示 1、新建excel import openpyxl from openpyxl.styles import Font wb openpyxl.…

求解,如何控制三相无刷电机?欢迎到访评论

问题:通过一个集成的TF2104芯片控制H桥上桥臂和下桥臂,如何控制?还是说得需要PWM_UH和PWM_UL分开控制?

365打卡第R3周: RNN-心脏病预测

🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 🏡 我的环境: 语言环境:Python3.10 编译器:Jupyter Lab 深度学习环境:torch2.5.1 torchvision0…

【实战】基于强化学习的 Agent 训练框架全流程拆解

一、引言 在人工智能蓬勃发展的今天,强化学习(Reinforcement Learning, RL)作为让智能体(Agent)在复杂环境中自主学习并做出最优决策的核心技术,正日益受到关注。从游戏领域中击败人类顶尖选手的 AlphaGo&a…

【音视频】⾳频处理基本概念及⾳频重采样

一、重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。 1.2 为什么要重采样 为什么要重采样? 当然是原有的⾳频参数不满⾜我们的需求,⽐如在FFmpeg解码⾳频的时候…

Prompt 结构化提示工程

Prompt 结构化提示工程 目前ai开发工具都大同小异,随着deepseek的流行,ai工具的能力都差不太多,功能基本都覆盖到了。而prompt能力反而是需要更加关注的(说白了就是能不能把需求清晰的输出成文档)。因此大家可能需要加…

Pycharm 代理配置

Pycharm 代理配置 文章目录 Pycharm 代理配置1. 设置系统代理1.1 作用范围1.2 使用场景1.3 设置步骤 2. 设置 python 运行/调试代理2.1 作用范围2.2 使用场景2.3 设置步骤 Pycharm 工具作为一款强大的 IDE,其代理配置在实际开发中也是必不可少的,下面介绍…

Spring Native:GraalVM原生镜像编译与性能优化

文章目录 引言一、Spring Native与GraalVM基础1.1 GraalVM原理与优势1.2 Spring Native架构设计 二、原生镜像编译实践2.1 构建配置与过程2.2 常见问题与解决方案 三、性能优化技巧3.1 内存占用优化3.2 启动时间优化3.3 实践案例分析 总结 引言 微服务架构的普及推动了轻量级、…