在Windows子系统Linux Ubuntu中链接Windows命令

3
我正在使用Windows 10进行Web开发,使用Ubuntu 18.04的Windows子系统。在Ubuntu中使用Node.js和NPM运行开发服务器和API服务器是可行的。当我在WSL中时,可以运行以下命令:
npm i
node app
npm run serve
# etc...

现在有一个新的情况。我有一个项目使用 Nightmare.js(改进但类似于 Phantom.js),当运行 npm i 时会安装 Electron 无头浏览器。在 WSL 中运行 npm i 将安装 Ubuntu 版本的 Electron,当尝试运行时将不会发生任何事情,浏览器不会打开。这是合理的,因为 WSL Ubuntu 没有可视环境,因此无法在其中打开浏览器。

如果我在 PowerShell 或 CMD 中运行 npm i(将使用 Windows 安装的 npm 而不是 WSL),则将安装 Windows 版本的 Electron,我可以在 PowerShell 中运行 node app 并正常工作,浏览器将会打开等等......

这创造了一个有趣的先例。看起来我需要有时使用Windows命令来运行我的应用程序。我需要在CMD或PowerShell中执行npm inode app,而不是直接在WSL中执行它们,以便使用Windows版本的npm和node而不是WSL Ubuntu的版本。这不是很方便,我希望能够全部在WSL中完成。微软的Visual Studio Code就是这种行为的一个例子。通过安装Remote-WSL插件,我可以在WSL Ubuntu中运行code命令,然后VSCode将在Windows中打开。
我的问题是:是否有一种方法可以像VSCode一样,在WSL Ubuntu中将命令链接到Host Windows系统?理想情况下,我希望在我的WSL Ubuntu中拥有类似于windows-npm iwindows-node app这样的东西,它们将在Host Windows系统上运行npmnode,而不是在WSL Ubuntu上运行相同的命令。
1个回答

3

这个问题受到的关注很少,所以我决定自己解决。我仍在寻找更好/本地的解决方案,但这是我想出来的一个解决方法。


WSL-Link

允许WSL用户从linux子系统内部运行任何CMD命令于主机Windows系统上。

要求

  • Windows 10
  • WSL
  • Node.js
  • NPM

必须在Linux子系统和Windows主机系统中都安装Node和NPM。

安装

wsl-link 必须分别在子系统和 Windows 主机中安装。

在linux子系统中:

npm i wsl-link -g

在 Windows 主机上:

npm i wsl-link -g

Windows启动

我使用带有供应的守护脚本的PM2在Windows上运行启动脚本。

在Windows主机上安装pm2和pm2-windows-startup:

npm i pm2 pm2-windows-startup -g

安装 pm2-startup:

pm2-startup install

运行 wsl-link pm2 守护进程:

wsl-link-pm2

保存 pm2 进程列表

pm2 save

您现在可以通过以下方式确认 wsl-link 应用正在运行:

pm2 status

使用方法

在 Windows 上启动服务器(如果没有使用 pm2 的启动安装):

pm2 状态显示

wsl-link

在 Linux 子系统上使用(将运行 npm -v 在 Windows 主机上):

wsl-link npm -v

案例

在 Linux 子系统上设置一个项目(或使用现有的):

mkdir wsl-link-test
cd wsl-link-test
touch app.js
npm init

app.js:

const Nightmare = require('nightmare');

(async () => {
  await Nightmare({
    show: true
  })
  .goto('https://google.com');
})();

安装 Windows 版本的 Nightmare.js 并在 Windows 上运行。

wsl-link npm i nightmare --save
wsl-link node app

你应该在 Windows 主机上看到 Electron 浏览器已打开。 Electron 运行

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接