网站开发行业新闻,公众号怎么做小程序,电脑制作ppt的软件叫什么,800折网站怎么做vscode 通过官方提供的 Remote-ssh 插件#xff0c;让我们可以直接通过 ssh 的连接方式#xff0c;打开服务器上的代码库#xff0c;远程进行开发。
我相信#xff0c;“高端” vscode 玩家一定尝试过该玩法#xff0c;简直好处多多。
但是用久了#xff0c;难免会碰到…vscode 通过官方提供的 Remote-ssh 插件让我们可以直接通过 ssh 的连接方式打开服务器上的代码库远程进行开发。
我相信“高端” vscode 玩家一定尝试过该玩法简直好处多多。
但是用久了难免会碰到一些问题。
问题
比如最近我老是会碰到因为 node.js 版本导致项目没法直接通过资源管理器中的 NPM SCRIPTS 运行起来的问题。
什么有前端童鞋说自己没碰到过那么该反思下自己是不是不喜欢用最新版本的 node.js 去构建项目了。
还是说回咱的问题吧。
之前有个项目由于比较老了只能用 14.xx 版本的 node.js 才能正常运行用更高的版本的 node.js 运行会有一堆依赖报错的问题导致项目没法正常的跑起来。
但是如果升级依赖吧代价又太大。毕竟这种吃力不讨好的事情职场老鸟都会避而远之除非老板同意你这么做否则没做好的话锅可少不了。
用 vscode 远程连上服务器的项目后选择 NPM SCRIPTS 列表中的 npm 脚本没法正常执行因为此时用的 node.js 版本不对。
但是如果通过 vscode 的终端进去如果版本刚好合适你会发现可以直接调用类似 npm start 这种命令直接正常运行项目。
如果不对也不打紧可以用 nvm 切换 node.js 版本接下来你会发现系统中默认的 node.js 版本调整好了通过类似 npm start 这种命令项目就可以正常运行了。
但是直接通过 NPM SCRIPTS 命令还是无法运行个人推测大概是因为这里还是用的老版本的 node.js。
机缘巧合
虽然这个问题不影响开发通过命令行去跑项目运行也不太影响使用体验但是总感觉有点不爽快。
毕竟发现问题却没法解决只能通过别的方式来规避作为一枚富有探索精神的程序员来说多少心有不甘。
后来也试图找过一些解决方案换了好多关键词去 google甚至 ChatGPT 都想方设法地问了好多次官方 issue 也翻烂了还是没找到合适的解决方案。
后来有一次机缘巧合下主机升级重启了。
再连上去发现用 NPM SCRIPTS 直接就可以正常运行了遂恍然大悟。
原来是因为 vscode-server 每次启动运行的时候会自动获取当前环境中的 node.js 版本并用这个版本的 node.js 来运行服务服务没重启当然不能更换其使用的 node.js 版本了。
验证推测
为了验证自己的推测连到服务器上探究了一番果不其然跟我的猜想一致。
原来当你通过 Remote-SSH 插件连上远程的机器的时候该插件会在远程的机器的用户文件夹下创建一个隐藏的目录 .vscode-server然后顺手在该目录中安装下 vscode-server 软件然后启动一个 vscode-server 服务。本地的 vscode 其实就是不断地和机器上的 vscode-server 在通信从而支持通过本地的 vscode 进行远程开发。
# 查看运行的进程
ps -ef |grep .vscode-server
root 1253 1 0 15:00 ? 00:00:00 sh /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/bin/code-server --start-server --host127.0.0.1 --accept-server-license-terms --enable-remote-auto-shutdown --port0 --telemetry-level all --connection-token-file /root/.vscode-server/.1a5daa3a0231a0fbba4f14db7ec463cf99d7768e.token
root 1265 1253 0 15:00 ? 00:00:18 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/server-main.js --start-server --host127.0.0.1 --accept-server-license-terms --enable-remote-auto-shutdown --port0 --telemetry-level all --connection-token-file /root/.vscode-server/.1a5daa3a0231a0fbba4f14db7ec463cf99d7768e.token
root 1368 1265 0 15:00 ? 00:00:03 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --typeptyHost --logsPath /root/.vscode-server/data/logs/20231204T150019
root 7379 1368 0 15:49 pts/4 00:00:00 /bin/bash --init-file /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh
root 8272 1265 0 15:53 ? 00:00:06 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --dns-result-orderipv4first /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --typeextensionHost --transformURIs --useHostProxyfalse
root 8283 1265 0 15:53 ? 00:00:00 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/out/bootstrap-fork --typefileWatcher
root 8356 8272 0 15:53 ? 00:00:00 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/json-language-features/server/dist/node/jsonServerMain --node-ipc --clientProcessId8272
root 8601 8374 0 15:53 ? 00:00:00 /root/.vscode-server/code-1a5daa3a0231a0fbba4f14db7ec463cf99d7768e command-shell --cli-data-dir /root/.vscode-server/cli --parent-process-id 8374 --on-port --require-token 420f17f0d59a
root 8753 8272 0 16:15 ? 00:00:01 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --max-old-space-size3072 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/node_modules/typescript/lib/tsserver.js --serverMode partialSemantic --useInferredProjectPerProjectRoot --disableAutomaticTypingAcquisition --cancellationPipeName /tmp/vscode-typescript0/a6e9883aad51f1da31b8/tscancellation-5a954acdf4ef24e6466c.tmp* --locale zh-cn --noGetErrOnBackgroundUpdate --validateDefaultNpmLocation --useNodeIpc
root 8754 8272 1 16:15 ? 00:00:04 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node --max-old-space-size3072 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/node_modules/typescript/lib/tsserver.js --useInferredProjectPerProjectRoot --enableTelemetry --cancellationPipeName /tmp/vscode-typescript0/a6e9883aad51f1da31b8/tscancellation-2340bc35bd699f3648c0.tmp* --locale zh-cn --noGetErrOnBackgroundUpdate --validateDefaultNpmLocation --useNodeIpc
root 8770 8754 0 16:15 ? 00:00:00 /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/node /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/node_modules/typescript/lib/typingsInstaller.js --globalTypingsCacheLocation /root/.cache/typescript/5.2 --enableTelemetry --typesMapLocation /root/.vscode-server/bin/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/extensions/node_modules/typescript/lib/typesMap.json --validateDefaultNpmLocation
root 8797 543 0 16:19 pts/0 00:00:00 grep --colorauto .vscode-server所以了解了原理以后再想解决我们碰到的问题就很简单了。
我们把服务器上的 vscode-server 服务关掉重开一下就好了。
不要用 vscode 指令
当然这里其实还有个坑。
在 vscode 界面按住 ctrlp然后在出现的输入框里键入 remote-ssh 会自动列出一些可以使用的 remote-ssh 命令。
里面会有 在主机上终止 VS Code 服务器、在主机上卸载 VS Code 服务器 等指令。
但是你用了就会发现一个坑这些命令都有用但是他在终止、卸载完就会立马重新装一个新的 VS Code 服务器根本不给你调整环境中 node.js 版本的时间。
所以我们成功的执行我们的操作我们得想别的方案来实现。
在主机上手动卸载 vscode-server
我们连接上主机通过下面的方式即可成功卸载掉 vscode-server
# 列出所有依赖 .vscode-server 路径的进程
ps -ef |grep .vscode-server# 杀掉所有依赖于 .vscode-server 路径的进程
ps uxa | grep .vscode-server | awk {print $2} | xargs kill -9# 删除掉 .vscode-server 文件夹
rm -rf ~/.vscode-server/当然卸载掉以后先别急着重新用我们的 vscode 编辑器连接服务器上的项目。
先用 nvm 切换下系统中默认的 node.js 版本。
# 默认指向对应的想用的 node.js 版本
nvm alias default nodeVersin为了验证我们设置 node.js 版本的操作是否成功可以试着断开远程的连接重新登录下。
如果发现没问题即可重新在本地用 vscode 连接服务器上的项目。
当然这地方还有个需要注意的点是不能傻傻的使用 nvm use nodeVersion 就以为将 node.js 默认的版本切换成功了。
这个操作只针对当前 bash退出去重新进来就会发现系统中默认的 node.js 版本又是之前的版本了。
反思
现在让我们回过头来看会发现其实解决问题的思路并不复杂。关键是我们要了解清楚引起问题的原因是什么。
知其然更要知其所以然才能在碰到问题的时候抽丝剥茧迅速的定位到问题所在。
参考链接
下面是一些参考资料有兴趣进一步研究的童鞋可以作为参考
visual studio code - How to kill VSCode remote services on Ubuntu Host - Stack Overflowarch linux - changing nodejs version through nvm is not persistent - Super UserGitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions