此答案旨在帮助其他人避免在 VS Code 中将 WSL 用于终端时花费 1-2 小时进行故障排除并慢慢找到针对常见问题的不同解决方案。它不包括安装特定的包,而是在安装确实依赖于它们的存在的东西时可能无法正确安装为依赖项的常见包,以及修复相关的常见设置。
步骤总结
- 已安装 WSL
- 为终端配置的 VS Code(或其他 IDE)
- 在 .profile 中安装了 NPM 和 路径修复(可能对其他工具有帮助)
- 已安装 build-essential(有助于使用 make/gcc/etc 的任何工具)
- 使用 WSL 的 VS 代码任务
- 附加功能
入门和要求
VS Code 终端配置
CTRL+, 键盘快捷键,或File → Preferences → Settings
在编辑窗口的右上角,确保您在正确的环境中工作:用户设置或工作区设置。
在设置搜索栏中,输入terminal.integrated.shell.windows(或任何能让你足够长的东西)
在实际设置文件中找到设置,使用Edit(鼠标悬停在左边:在没有鼠标的触摸屏上,你应该可以简单地点击线的左边),然后选择Replace in Settings
在右侧窗格中,修改在修改后的 json 文件中创建的条目:将之前的设置替换为
"C:\\WINDOWS\\Sysnative\\bash.exe"
其他 IDE:IntelliJ
打开设置/工具/终端,将“Shell path”字段设置为"C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
使您的 WSL Ubuntu Bash 终端能够为开发人员提供功能
当你使用 CTRL+` 打开终端时,你现在应该有一个 bash 终端了。
如果这是您第一次运行 bash.exe,系统可能会询问您安装 Ubuntu。这样做。安装完成后,选择要在 WSL Ubuntu 中使用的用户名和密码。这些不必与您当前的 Windows 帐户一致,重要的是要注意它们不会根据您的 Windows 帐户密码的更改而更改。
完成后,您的终端中会出现 bash 命令提示符。
请注意,与 Windows 上的 git-bash 不同,这是一个单独的环境。虽然它可用于在自身之外启动 Windows 软件,但您需要适当的 Ubuntu 软件包才能在实际终端中运行它们。
目前,WSL 并未加载您可能期望或习惯拥有的所有内容,并且根据默认配置文件设置,有些内容可能与您在 Windows 中加载的软件发生冲突。
更新和 git
注意:我会将这些记录为 sudo,供那些只需要其中一部分的人使用,但一开始的一个选择是改为 sudo su 并简单地运行以下命令而不须藤。
确保your Ubuntu packages 是最新的:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
安装 git:
sudo apt-get install git
Node.js 和 NPM
如果您已经在 Windows 中加载了 Node 或 NPM,在 Ubuntu 中运行它们可能会因为路径问题而出现问题。因此,您需要安装 Ubuntu 本机版本并确保使用它们。
首先,install node.js with NPM。
(替代:install NVM 并使用它来安装 node.js)
安装后,运行npm命令可能会失败:例如npm -v可能会给你:
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")
这是由于pathing issue with a fairly straightforward solution。使用您喜欢的 CLI 编辑器(例如 nano、vim、emacs、cat 和 sed... 等),打开您的 ~/.profile
nano ~/.profile
注意:do NOT attempt to edit Linux files using Windows tools.(感谢@david-c-rankin's comment 提供带有粗体红色文本的官方链接)如果您不想在终端中为此使用 CLI 编辑器,请参阅这篇文章的底部以获取有关如何运行 GUI 的链接。
目前,WSL 中默认的 bash PATH 变量是
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
在前两个二进制目录之后注入 windows 路径。不幸的是,这不会导致在 windows 安装 npm 之前使用 /usr/bin,所以在最后的 $PATH 之前添加它:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
保存,然后重新加载终端或仅获取路径文件
source ~/.profile
构建必备
如果您使用任何需要编译或以其他方式使用 make 的东西,几乎可以保证您需要安装这些;因此,如果您在安装 node.js 时没有安装它们,请这样做。简单地使用 the build-essential package 而不是尝试单独安装所有内容要容易得多。
请注意,如果没有这些,依赖 Ruby FFI 的 Compass 等软件包将会失败。如果您在正确安装和运行工具时遇到问题,请确保您已安装 gcc 和 make 是一个不错的起点。
sudo apt-get install -y build-essential
使用 Ubuntu 运行任务
请注意,如果您使用 VS Code 的 tasks.json 来运行构建任务,默认情况下它仍将使用 Windows 子系统而不是 Ubuntu 子系统来运行它们。 有时这可能是你想要的,但如果你刚刚在 Ubuntu 而不是 Windows 中安装了 grunt-cli,那可能不是。
VS Code 最近在 2017 年 5 月对 Tasks 的工作方式进行了更新,使其能够set the task runner as the terminal。这是迄今为止迁移任务最简单的方法。
简单设置
"runner": "terminal",
在您的tasks.json 中,您就完成了(假设您现在已在 WSL Ubuntu 中安装了您尝试运行的所有适当工具)。
这是非常可移植的,理想情况下不需要在具有或不具有 WSL 的系统之间或与其他操作系统之间进行任何更改,这是我推荐的方法。
目前,此方法生成另一个 TERMINAL 选项卡实例(从下拉列表中访问)。您仍然可以设置适当的观察者,但这确实意味着它不再位于 OUTPUT 选项卡上。
旧方法能够调用 WSL Ubunutu Bash shell 并将其显示在 OUTPUT 中,并且涉及使用 -c 参数调用 bash.exe 或使用 shell 脚本。不幸的是,它不是语义化的,因为我们将bash 作为我们的命令并将我们想要运行的东西作为参数传递给它。这也意味着它不能快速移植到其他系统。
您可以使用之前为终端本身提供 VS Code 的相同位置,C:\\WINDOWS\\Sysnative\\bash.exe 作为 command 的值
将args 数组的第一个元素设置为-c,将第二个元素设置为您要运行的命令(credit to the second half of this answer)。
或者,您可以改为run a shell script as seen here。
更多有用的信息
想start VSCode in Windows from the WSL Bash command line?
想要graphical interface for your WSL Ubuntu? (这将允许您对 Ubuntu 系统本身内的文件使用 Linux GUI 编辑器:不要使用 Windows 编辑工具编辑它们,请参阅 npm 部分中的 cmets/note)
想要构建(请参阅上面有关为 WSL 正确设置 VS 代码任务的部分)和debug entirely within WSL Ubuntu? (这显示了如何使用 gdb 来执行此操作,但 pipeTransport 概念可以与其他调试器一起使用)(归功于 this answer,但它之前的一个还提供了一种使用本地环回的方法,这可能证明有用)