.nvmrc无效

背景

既然你已经使用了nvm那么他的功能我就不介绍了。但是使用场景我与开发小伙伴探讨了一下发现很多问题。你的nvm使用方法真的正确吗?

问题:假设现在有10个项目对应10个不同的node版本,你应该怎么来管理呢?
同学1: 写个本地文档记录到电脑中!
我 : 这样真的好吗?
同学2: 每个READ.md文件中说明一下!
我 : 每个项目的READ.md你确定都会看吗?每次切换项目都要看吗?
同学3: 既然我们用了nvm 那直接在package.json中修改下启动命令!
我 : 自动化部署的时候需要执行启动命令吗?

但是同学3给了我们思路。有什么每个项目可以管理自己指定版本的东西吗?
于是我翻了下nvm的文档 答案是有的 .nvmrc

使用

根据官网的提示进入项目根目录 执行如下代码

  • 根目录下创建.nvmrc内容为16.19.1
    echo "16.19.1" > .nvmrc
    
  • 切换版本为nvmrc中指定版本
    nvm use
    

这样似乎达到了我们的目的,只要每个文件都创建一个.nvmrc文件就好。但是事情真的会那么圆满吗。
在这里插入图片描述
这是怎么回事,为什么在服务器上在mac都好好的 就在windows电脑上不行呢?
查阅了很多资料,也没有具体的答案,我以为读取到了最外面的配置文件 因为官网将nvmrc会一直往上找直到找到最上层。然而都没什么卵用。 就算找到解决方案好像也没办法 我总不能吧开发同学的电脑都修改一下吧。
在 bash 执行nvm use $(cat .nvmrc) 可以使用 但是在cmd一样失败
最终找到一种中转方案

nvm use 无效最终解决方案

兼容bash cmd 在mac windows linux 均可兼容。如果使用cicd部署 记得执行切换npm run nvm命令

  • 根目录下创建.nvmrc内容为16.19.1
echo "16.19.1" > .nvmrc
  • 修改package.json 文件 scripts 中添加
	"scripts": {"nvm":"node lvnvm.js",...你之前的代码}
  • 跟目录下新增lvnvm.js文件 文件内容如下 文件名称最好别修改有大坑
const fs = require('fs');
const os = require('os');
const { execSync } = require('child_process');const nvmrcContent = fs.readFileSync('.nvmrc', 'utf8').trim();
const nvmVersion = os.platform() === 'win32' ? execSync('type .nvmrc', { encoding: 'utf8' }).trim() : nvmrcContent;execSync(`nvm use ${nvmVersion}`, { stdio: 'inherit' });
  • 这时候修改根目录下.nvmrc为指定版本
  • npm run nvm 即可切换到指定版本

废话文学

原本是想用官方支持的nvm use直接读取.nvmrc的。调研发现,我、群友、同事的环境,都有失败的情况,无奈之下用node做了层中专给了指定版本。如果有大佬了解这方面的知识欢迎评论指导!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02 |「新建项目」

前言 新建项目 文章目录 前言一、步骤二、结构3. Java 文件夹4. res 文件夹5. Gradle Scripts文件 三、运行流程四、Gradle 构建项目1. 是什么2. 作用 一、步骤 1)New Project 2)Empty Activity 3)Finsh 选项: Name&#xff1a…

在SpringBoot中实现文件上传

1.创建一个SpringBoot的项目&#xff0c;需要导入spring-boot-starter-web的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 2.编写文件的核心配置applica…

.NET SqlSuger初次使用

文章目录 前言SqlSuger测试DB Fisrt和CodeFirst 前言 我之前在B站上面发视频说如何使用EF框架去生成实体类。我当时做了Mysql,Sql server,Sqlite的适配。但是下面评论区说SqlSuger很好用&#xff0c;而且很多公司都用SqlSuger。 B站视频&#xff1a;C#如何快速开发数据库业务…

云原生之深入解析Prometheus的安装部署和原理分析

一、Prometheus 简介 ① Prometheus 特性 Prometheus 最开始是由 SoundCloud 开发的开源监控告警系统&#xff0c;是 Google BorgMon 监控系统的开源版本。在 2016 年&#xff0c;Prometheus 加入 CNCF&#xff0c;成为继 Kubernetes 之后第二个被 CNCF 托管的项目。随着 Kub…

15 - 信号处理设计模式

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. Linux应用程序安全性讨论1.1 问题1.2 不同场景1.2.1 场景一&#xff1a;不需要处理信号1.2.2 场景二&#xff1a;需要处理信号 2. 场景…

部署LAMP 平台(二十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、PHP安装配置 1. PHP的作用 2. PHP安装 2.1 yum安装 2.2 PHP语言简介 三、安装 四、启动 五、书写测试页面 六、客户端访问 七、书写连接数据库页…

龙迅LT8711HE DP/Type-C输入转HDMI2.0

LT8711HE是一款高性能C/DP1.2到HDMI2.0转换器&#xff0c;设计用于将USB C型源或DP1.2源连接到HDMI2.0接收器。 LT8711HE集成了DP1.2兼容接收机和HDMI2.0兼容发射机。此外&#xff0c;还包括两个CC控制器&#xff0c;用于CC通信&#xff0c;以实现DP-Alt模式和电源输送功能&…

微服务系列文章之 Redisson实现分布式锁(3)

一、概述 1、技术架构 项目总体技术选型 SpringBoot2.4.5 Maven3.5.4 Redisson3.5.4 lombok(插件)2、加锁方式 该项目支持 自定义注解加锁 和 常规加锁 两种模式 自定义注解加锁 DistributedLock(value"goods", leaseTime5)public String lockDecreaseStock(…

8、链路层以太网协议,ARP协议32

网络层IP协议描述了通信中的起点到终点&#xff0c;但是数据不是飞过去的&#xff0c;是经过了大量的中间节点转发完成的。 一、以太网协议 1、MAC地址 物理硬件地址&#xff0c;是每一块网卡在出厂时设定的地址&#xff0c;固定且不可修改&#xff08;早期&#xff0c;现在可…

C语言模拟实现字符串处理函数

需要多一点点勇气&#xff0c;来面对变差的自己 大家好&#xff0c;我是纪宁。 这篇文章为大家带来的是5大字符串处理函数的模拟实现。 文章目录 1.strlen函数的模拟实现 2.strcpy函数的模拟实现 3.strcmp函数的模拟实现 4.strcat函数的模拟实现 5.strstr函数的模拟实现…

软件测试|SQL常用语法,你都会吗?

前言 SQL作为一门语言&#xff0c;和其他编程语言一样&#xff0c;都是需要遵循一些特定的规范和准则的&#xff0c;这也就是我们常说的语法&#xff08;Syntax&#xff09;。 下面是几个SQL的语法规则&#xff1a; 所有的 SQL 语法都必须以关键字&#xff08;也称命令&…

04-spring配置文件加载过程

文章目录 spring配置文件加载过程 spring配置文件加载过程 调用refresh方法中obtainFreshBeanFactory() Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.…