You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nvm管理Node.js时执行sudo lt命令报yargs版本兼容错误

问题解决:sudo执行localtunnel时Node版本不匹配报错

问题详情

  • 系统环境:Ubuntu 20.04.6,nvm 0.39.1管理Node.js 18.15.0
  • 执行命令:sudo lt --port 25565
  • 报错信息:yargs supports a minimum Node.js version of 12
  • 排查情况:nvm ls显示当前用户使用Node.js 18.15.0,但重装Node.js、nvm及执行sudo apt update后问题仍存在

错误堆栈

/usr/local/lib/node_modules/localtunnel/node_modules/yargs/build/index.cjs:1
"use strict";var t=require("assert");class e extends Error{constructor(t){super(t||"yargs error"),this.name="YError",Error.captureStackTrace(this,e)}}let s,n=[];function i(t,o,a,h){s=h;let l={};if(Object.prototype.hasOwnProperty.call(t,"extends")){if("string"!=typeof t.extends)return l;const r=/\.json|\..*rc$/.test(t.extends);let h=null;if(r)h=function(t,e){return s.path.resolve(t,e)}(o,t.extends);else try{h=require.resolve(t.extends)}catch(e){return t}!function(t){if(n.indexOf(t)>-1)throw new e(`Circular extended configurations: '${t}'.`)}(h),n.push(h),l=r?JSON.parse(s.readFileSync(h,"utf8")):require(t.extends),delete t.extends,l=i(l,s.path.dirname(h),a,s)}return n=[],a?r(l,t):Object.assign({},l,t)}function r(t,e){const s={};function n(t){return t&&"object"==typeof t&&!Array.isArray(t)}Object.assign(s,t);for(const i of Object.keys(e))n(e[i])&&n(s[i])?s[i]=r(t[i],e[i]):s[i]=e[i];return s}function o(t){const e=t.replace(/\s{2,}/g,"

Error: yargs supports a minimum Node.js version of 12. Read our version support policy: https://github.com/yargs/yargs#supported-nodejs-versions
    at Object.<anonymous> (/usr/local/lib/node_modules/localtunnel/node_modules/yargs/build/index.cjs:1:57316)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/localtunnel/node_modules/yargs/index.cjs:5:30)
    at Module._compile (internal/modules/cjs/loader.js:778:30)

nvm ls输出

v12.22.12
       v16.20.0
->     v18.15.0
         system
default -> 16.20 (-> v16.20.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v18.15.0) (default)
stable -> 18.15 (-> v18.15.0) (default)
lts/* -> lts/hydrogen (-> v18.15.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.0
lts/hydrogen -> v18.15.0

原因分析

sudo执行命令时会切换到root用户环境,而root用户未配置nvm,默认使用系统预装的Node.js版本(该版本大概率低于12),导致localtunnel依赖的yargs触发版本校验报错。当前用户的nvm配置仅对普通用户生效,root环境无法读取。

解决方案

方案1:无需sudo直接执行

25565不属于Linux特权端口(1-1024),普通用户有权限绑定该端口,直接执行:

lt --port 25565

方案2:让sudo继承当前用户环境

使用-E参数保留当前用户的环境变量(包括nvm配置),执行:

sudo -E lt --port 25565

方案3:指定Node.js路径执行

  1. 先查看当前用户的Node.js路径:
which node
  1. 再查看lt的路径:
which lt
  1. 用sudo直接调用指定版本的Node执行lt(替换为实际路径):
sudo ~/.nvm/versions/node/v18.15.0/bin/node ~/.nvm/versions/node/v18.15.0/bin/lt --port 25565

方案4:给root用户配置nvm

  1. 切换到root用户:
sudo su
  1. 安装nvm:从官方渠道获取v0.39.1版本的安装脚本执行(与普通用户安装流程一致)
  2. 重新加载环境变量:
source ~/.bashrc
  1. 安装Node.js 18.15.0并设置为默认:
nvm install 18.15.0
nvm alias default 18.15.0
  1. 安装localtunnel:
npm install -g localtunnel

之后即可直接用sudo执行lt命令。

内容的提问来源于stack exchange,提问作者Sterling Deye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:47:49