Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

打开npm直接报错Api invoke error Error invoking remote method 'apiInvoke': Error: /bin/sh: npm: command not found #427

Open
1 task done
ammondu opened this issue Jan 2, 2025 · 19 comments
Assignees
Labels
Bug Something isn't working 讨论中
Milestone

Comments

@ammondu
Copy link

ammondu commented Jan 2, 2025

  • 你是否在现有 Issue列表 中搜索过相同问题,但未找到?

Ⅰ. 请说明操作系统及DS的版本号:

  1. 操作系统:macos 14.7.2
  2. DS版本号:2.0.0-RC1

Ⅱ. 问题描述:

打开npm 直接报错 Api invoke error
Error invoking remote method 'apiInvoke': Error: /bin/sh: npm: command not found

Ⅲ. 期望的结果:

解决bug

Ⅳ. 如何复现问题?

直接打开npm就会提示。

Ⅴ. 请提供相关的错误日志,尽可能的详细:(日志文件在 ${user.home}/.dev-sidecar/logs/ 目录下)

[2025-01-02T10:49:06.864] [INFO] core - shell: npm config list --json
commands: npm config list --json 
   error: Error: Command failed: npm config list --json
/bin/sh: npm: command not found
  cmd: 'npm config list --json'
@ammondu ammondu added the Bug Something isn't working label Jan 2, 2025
@wangliang181230
Copy link
Contributor

看下环境变量有没有配置吧。

@wangliang181230 wangliang181230 added the 等待回复 等待用户回复的问题 label Jan 3, 2025
@Ericlyclyclyc
Copy link

me too...
什么鬼: Api invoke error Error invoking remote method 'apiInvoke': Error: 'npm' �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���

@Ericlyclyclyc
Copy link

cmd打开npm正常啊

看下环境变量有没有配置吧。

@lanhao945
Copy link

遇到了类似的问题。

在ubuntu 22.04 下, node 和npm 均以安装好(通过nvm安装),且终端中node -v 和 npm -v 均能正确输出版本信息。

终端和dev-sidecar 以相同用户启动。

当dev-sidecar 选中npm 代理时,输出异常“Api invoke error Error invoking remote method 'apiInvoke': Error: /bin/bash: 行 1: npm: 未找到命令”

@wangliang181230
Copy link
Contributor

wangliang181230 commented Jan 6, 2025

估计是权限问题,你们把ds的权限提高一下试试。

@ammondu
Copy link
Author

ammondu commented Jan 6, 2025

image

@wangliang181230
Copy link
Contributor

你们尝试下把npm的完整路径配置到 ds 的 npm命令里试一下?

@wangliang181230
Copy link
Contributor

如:
图片

@ammondu
Copy link
Author

ammondu commented Jan 6, 2025

我mac下确实没有这个 /bin/sh: npm: command not found

@ammondu
Copy link
Author

ammondu commented Jan 6, 2025

我在我mac中brew install npm 问题解决。你们可以继续讨论。

@lanhao945
Copy link

通过查找npm 路径得到:

home/username/.nvm/versions/node/v23.5.0/bin/npm
然后按照要求,在devsidecar中配置npm 路径,重启后,尝试开启npm 代理:
Error invoking remote method 'apiInvoke': Error: /usr/bin/env: "node": 没有那个文件或目录

从表现来看,不像是权限,更像是,devsidecar中将node 的路径(或者npm路径)写得相对固定?

@lanhao945
Copy link

lanhao945 commented Jan 6, 2025

这是devsidecar core.log 中关于node 的部分日志:

===>
commands: npm config set proxy=http://127.0.0.1:31181 
   error: Error: Command failed: npm config set proxy=http://127.0.0.1:31181
/bin/bash: 行 1: npm: 未找到命令

    at ChildProcess.exithandler (node:child_process:408:12)
    at ChildProcess.emit (node:events:526:28)
    at maybeClose (node:internal/child_process:1092:16)
    at Socket.<anonymous> (node:internal/child_process:451:11)
    at Socket.emit (node:events:526:28)
    at Pipe.<anonymous> (node:net:687:12) {
  killed: false,
  code: 127,
  signal: null,
  cmd: 'npm config set proxy=http://127.0.0.1:31181'
} 
<===

@lanhao945
Copy link

我在我mac中brew install npm 问题解决。你们可以继续讨论。

ubuntu中通过apt install 应该能解决这个问题。但是这里主要是用到了nvm,是希望通过nvm 来控制node 的版本。估计是引入了nvm 导致了逻辑不兼容。

@wangliang181230 wangliang181230 added 讨论中 and removed 等待回复 等待用户回复的问题 labels Jan 6, 2025
@starknt
Copy link
Contributor

starknt commented Jan 6, 2025

可能是使用了像zsh类似的shellnvm只会把路径注册到.zshrc中,导致在原始的sh找不到npm的路径,后面我们可以考虑使用 tinyexec 替换内部实现,它处理了环境变量的问题

@Ericlyclyclyc
Copy link

Ericlyclyclyc commented Jan 6, 2025 via email

@lanhao945
Copy link

在ubuntu 22.04 下,尝试继续保留 nvm 并使用DS,最后发现:

在路径/etc/profile 中增加nvm 相关的配置,并重启, DS 中点击npm 代理时,不再报错.

其中增加的配置,来自于安装脚本安装后,原本存在于用户目录下~/.bashrc 尾部新增的部分:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

但是这种做法混淆了系统软件和用户软件,感觉只能适用于个人主机。

希望 DS 后续能修复这里的BUG。感谢

@peasoft
Copy link

peasoft commented Jan 21, 2025

这行代码,Mac 上 shell.getSystemShell() 得到的是 sh 而不是 zsh。所以仿照 Linux 系统指定 shell 为 zsh 即可。

@Ericlyclyclyc
Copy link

Ericlyclyclyc commented Jan 21, 2025 via email

@Ericlyclyclyc
Copy link

Ericlyclyclyc commented Jan 23, 2025

然后,发现关闭代理(点圆型按钮)在点开(也是点圆形按钮)就会自动打开了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working 讨论中
Projects
None yet
Development

No branches or pull requests

6 participants