【问题标题】:nvm, node etc. paths missing from integrated terminal集成终端中缺少 nvm、节点等路径
【发布时间】:2018-09-14 22:44:27
【问题描述】:

我在 OSX High Sierra 上的 iTerm2 中使用 Insiders 版本和带有 ohmyzsh 的 zsh。

如果我在 VSCode 中启动集成命令行 echo $path 返回:

/Users/username/.yarn/bin:/Users/username/.cargo/bin:/usr/bin:/usr/bin/lldb:
/Users/username/bin:/usr/local/bin:/Users/username/.scripts:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

显然,节点路径、nvm 路径等丢失了,所以终端对我来说用处不大。

但是在 VSCode 之外的终端中输入 echo $path 会返回:

/Users/username/.nvm/versions/node/v9.0.0/bin /Users/username/.yarn/bin
/Users/username/.cargo/bin /usr/bin /usr/bin/lldb /Users/username/bin
/usr/local/bin /Users/username/.scripts /usr/local/bin /usr/bin /bin /usr/sbin
/sbin /opt/X11/bin

其中包含我的开发活动所需的所有路径。

我的~/.zshrc 中有这个别名:

code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCodeInsiders" --args $* ;}

如果我使用来自外部终端的别名启动代码,则节点路径是正确的。

据我所知,这是因为从 Dock 快捷方式加载代码不会使用我的用户配置文件加载终端,因此它会从 /etc/zprofile 加载配置文件,它使用 /usr/libexec/path_helper 设置路径所以它错过了我发展所需的所有重要途径。

我怀疑大多数人更愿意使用他们的用户配置文件中的设置。这意味着我们所有的开发应用程序都可以在集成终端上运行,并且结束了由路径设置不当引起的臭名昭著的nvm is not compatible with the npm config "prefix" option 错误。

从 Dock 启动时,如何让 VSCode 使用我的用户配置文件中的终端环境?

【问题讨论】:

    标签: visual-studio-code


    【解决方案1】:

    进入设置并编辑集成终端

    // Object with environment variables that will be added to the VS Code process to be used by the terminal on OS X
      "terminal.integrated.env.osx": {},
    

    在那里你可以传入你的变量

    【讨论】:

    • 这在一定程度上是可行的,但如果我们能拥有terminal.integrated.env.useUserEnv 那就太好了。管道在那里,因为这实际上是我们从命令行启动它时所做的。
    • 您是否尝试将其添加到您的用户设置“terminal.explorerKind”:“external”?
    • "terminal.explorerKind" 只是确定资源管理器中的右键上下文菜单是启动集成终端还是外部终端。我仍然想使用集成终端...不过我确实感觉到了一个拉取请求;)
    【解决方案2】:

    vscode 文档还提供了警告nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local" 的解决方案:

    https://github.com/Microsoft/vscode-docs/blob/master/docs/editor/integrated-terminal.md#why-is-nvm-complaining-about-a-prefix-option-when-the-integrated-terminal-is-launched

    来自文档:

    这主要是 macOS 问题,不会发生在外部 终端。造成这种情况的典型原因如下:

    npm 是使用node 的另一个实例全局安装的,即 路径中的某处(例如/usr/local/bin/npm)。为了得到 $PATH上的开发工具,VS Code会启动一个bash登录 启动时的外壳。这意味着您的~/.bash_profile 已经 运行,当集成终端启动时,它将运行另一个 登录 shell,可能以意想不到的方式重新排序 $PATH。至 解决这个问题,您需要追踪旧的npm 在哪里 安装并删除它及其过时的 node_modules。你可以 通过找到 nvm 初始化脚本并运行 which npm 来做到这一点 在它运行之前,它应该在你启动一个新的时候打印路径 终端。

    一旦你有了 npm 的路径,你可以通过以下方式找到旧的 node_modules 通过运行类似这样的命令来解析符号链接:

    ls -la /usr/local/bin | grep npm

    这会给你最后解决的路径:

    ... npm -> ../lib/node_modules/npm/bin/npm-cli.js

    从那里删除文件并重新启动 VS Code 应该可以解决问题:

    rm -R /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 2015-12-31
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2017-09-04
      相关资源
      最近更新 更多