1111mp / nvm-desktop

Node Version Manager Desktop - A desktop application to manage multiple active node.js versions.
https://github.com/1111mp/nvm-desktop
MIT License
675 stars 34 forks source link

nvmd安装后再跑 ”serve"项目不起作用了 #17

Closed rhejuilna27 closed 9 months ago

rhejuilna27 commented 9 months ago

复现流程 1.安装了nvmd2.4.0版本 2.建了一个空项目文件夹Share,设定了node版本是16.14.1 3.执行npm install --global serve 成功 4.执行 serve 失败,提示 nvm-desktop:command not fund: serve

C:\Users\Administrator.nvmd\bin目录下已经有serve.cmd和serve.exe文件

”serve“项目参考地址:https://www.npmjs.com/package/serve?activeTab=readme 失败截图

rhejuilna27 commented 9 months ago

serve 能够把本地变成一个轻量的web服务器

1111mp commented 9 months ago

复现流程 1.安装了nvmd2.4.0版本 2.建了一个空项目文件夹Share,设定了node版本是16.14.1 3.执行npm install --global serve 成功 4.执行 serve 失败,提示 nvm-desktop:command not fund: serve

C:\Users\Administrator.nvmd\bin目录下已经有serve.cmd和serve.exe文件

”serve“项目参考地址:https://www.npmjs.com/package/serve?activeTab=readme 失败截图

请问一下,是其它的node版本下已经全局安装过serve之后,再切换到了其它的node版本之后(项目下指定)再在这个版本下全局安装serve时,出现了截图里面的报错吗,需要这个信息来进一步定位到这个报错的原因。

然后可以截图一下 %HOMEPATH%/.nvmd/versions/16.14.1 目录下有没有对应的serveserve.cmd文件,以及在%HOMEPATH%\.nvmd\versions\16.14.1\node_modules\下有没有成功安装serve完整的包文件(这是默认的npm全局包安装路径,如果之前改过的话可以通过命令npm root -g来查看),最后就是可以也贴出%HOMEPATH%\.nvmd\packages.json文件的内容吗。

谢谢。

1111mp commented 9 months ago

请问一下,是其它的node版本下已经全局安装过serve之后,再切换到了其它的node版本之后(项目下指定)再在这个版本下全局安装serve时,出现了截图里面的报错吗,需要这个信息来进一步定位到这个报错的原因。

这个报错问题已经确认了,复制文件的时候存在同名文件时会出现这个错误提示(不会影响正常流程),我本地已经修复了。

然后我按照你的操作,在我自己的windows11系统上试了一遍,切换多个node版本之后全局安装serve包(包括项目目录下),都正常,所以我需要你提供上面评论里面提到的那些信息才能确认到具体问题。

rhejuilna27 commented 9 months ago

我是在项目下面第一个node16.14.2版本的时候全局安装了一个serve,安装没有报错,但是执行serve的时候报command not found; 然后我把项目的node切换成了16.14.1,又全局安装了一个serve,这个时候报文件已经存在,然后我去.nvmd\bin下删除了两个serve文件就正常了。 但是执行serve的时候依然报command not found。而且这个问题在我同事的电脑上也出现了。哦对了,有同一个背景就是我们两在之前都单独安装过node。感谢大佬抽空看我的问题。我们现在已经下班了,没有环境复现了,因为是公司的台式机,啊哈哈哈。我待会在我自己的笔记本上试试,我自己的笔记本已经安装过nvm的windows版本了,不知道会不会出现别的问题。

1111mp commented 9 months ago

客气了。

.nvmd\bin下的serve.exe&serve.cmd文件别删,这两个文件是入口,安装报文件已存在的错误不会影响实际的使用,我本地能够复现这个问题。

之前单独安装过node是不影响的,只有在系统的环境变量存在之前的node目录而且优先级比%HOMEPATH%\.nvmd高的话,可能会出现问题,但是这种情况不会进入到nvmd,也不会在.nvmd\bin下出现serve.exe&serve.cmd文件,所以这个点可以排出。

然后可能需要等到你去公司之后提供更多的信息才能确认问题了,但是根据你说的 我是在项目下面第一个node16.14.2版本的时候全局安装了一个serve,安装没有报错,但是执行serve的时候报command not found,很有可能是包没有安装成功,%HOMEPATH%\.nvmd\versions\16.14.1目录下不存在serve&serve.cmd等serve包的入口文件。

lib_path.exists() 不存在的时候才会报:nvm-desktop: command not found: serve错误,lib_path目录就是:%HOMEPATH%\.nvmd\versions\16.14.1\serve

rhejuilna27 commented 9 months ago

大佬,我来了,我来公司了哈哈哈。上个礼拜是全局安装serve的时候报错的,我今天试了一下非全局安装,直接在share项目下npm install serve。是在对应的16.14.1版本下安装了,对应.nvmd\versions\16.14.1\node_modules\npm\bin下出现了serve.cmd和serve.exe,然后我执行serve就正常了。。。。

1111mp commented 9 months ago

在目录 .nvmd\versions\16.14.1\node_modules\npm\bin 下出现 serve.exe & serve.cmd ? 这不可能吧。非全局安装不会在这个目录下安装 serve 包 只会在npm的cache目录下有对应的包的压缩文件的。而nvm-desktop也不会有这个行为。

上面两个都是npm install -g 的默认行为

你可以试着先 npm uninstall serve -g 卸载掉 (所有版本下都卸载掉) 然后再安装。

rhejuilna27 commented 9 months ago

1.全部卸载了serve, 现在整个环境是这样的: 系统默认16.14.2 ;share项目默认16.14.1; 下面的路径均没有serve两个文件 C:\Users\Administrator.nvmd\bin C:\Users\Administrator.nvmd\versions\16.14.2 C:\Users\Administrator.nvmd\versions\16.14.1 C:\Users\Administrator.nvmd\versions\16.14.1\node_modules\npm\bin C:\Users\Administrator.nvmd\versions\16.14.2\node_modules\npm\bin 2.share 项目下 全局安装 serve C:\Users\Administrator.nvmd\bin 有两个serve文件 C:\Users\Administrator.nvmd\versions\16.14.1\node_modules\npm\bin 没有两个serve文件 C:\Users\Administrator.nvmd\versions\16.14.2\node_modules\npm\bin 也没有两个serve文件

3.这个时候share项目下执行serve 就报nvm-desktop: command not found: serve,也就是上个礼拜的错误

1111mp commented 9 months ago

C:\Users\Administrator\.nvmd\versions\16.14.1\ 目录下有 serve相关的文件吗

rhejuilna27 commented 9 months ago

没有,versions下面的4个路径都没有

1111mp commented 9 months ago

那就是全局包安装路径的问题 你运行一下npm root -g命令 看输出的是什么

rhejuilna27 commented 9 months ago

路径在我的D盘另外一个路径 D:\node.js\node_global\node_modules。因为装nvmd之前都装过node,装在了D盘,也设置了path

1111mp commented 9 months ago

ok 已经定位到问题了 没有考虑到npm设置过全局包安装路径之后的行为 修复之后会在今天的2.5.0版本中发布上去 感谢

rhejuilna27 commented 9 months ago

主要是项目有前景!要不是我代码水平差,我就加入项目了。。我是个后端,结果我在搞前端项目,手动滑稽

1111mp commented 9 months ago

没关系的 每个人擅长的领域都不一样 也感谢你一直提供反馈的信息 开源的项目就是需要这样慢慢迭代进步 谢谢

1111mp commented 9 months ago

已在 Release v2.5.0 中修复。 如果有问题请随时打开此问题。

1111mp commented 9 months ago

路径在我的D盘另外一个路径 D:\node.js\node_global\node_modules。因为装nvmd之前都装过node,装在了D盘,也设置了path

ok 已经定位到问题了 没有考虑到npm设置过全局包安装路径之后的行为 修复之后会在今天的2.5.0版本中发布上去 感谢

这几天在深入了解npm和corepack之后发现,这是npm的默认行为的,在设置过prefix(全局安装包的地址)之后,需要将prefix路径添加到系统环境变量中去。我之前的解决方法是追踪npm的prefix的路径,然后查找对应包的执行文件,相当于在nvmd中自动做了将prefix路径添加到环境变量里面,但是会衍生出其他问题,如果用户切换了很多次,或者已开始在默认的路径下安装过,那么nvmd无法跟踪这么多的目录,所以最终决定还是还原其默认的行为了。

详细的说明你可以查看:#23