Связывание Windows команд внутри Windows подсистемы для Linux Ubuntu - PullRequest
1 голос
/ 29 мая 2020

Я занимаюсь веб-разработкой на Windows 10, используя Windows Подсистему для Linux с Ubuntu 18.04. Использование Node.js и NPM внутри Ubuntu и запуск серверов разработки и серверов API работает.

Когда я нахожусь внутри WSL, я могу запускать команды:

npm i
node app
npm run serve
# etc...

И теперь есть новый ситуация. У меня есть проект, использующий Nightmare. js (улучшенный, но похожий на Phantom. js), который устанавливает Electron безголовый браузер при запуске npm i . Запуск npm i внутри WSL установит версию Electron для Ubuntu, и при попытке запуска ничего не произойдет, браузер не будет открыт. Это логично, потому что WSL Ubuntu не имеет визуальной среды, поэтому не может открыть в нем браузер.

Если я запускаю npm i с PowerShell или CMD (npm, установленный на Windows, вместо этого WSL будет будет установлена ​​Windows версия Electron, и я могу запустить ее с node app внутри PowerShell, и она будет работать должным образом, браузер откроется и c ...

Это создает и интересно прецедент. Похоже, мне иногда нужно будет запускать свои приложения с командами Windows. Вместо того, чтобы делать npm i или node app непосредственно в WSL, я должен переключиться на CMD или PowerShell и выполнить их там, чтобы вместо WSL Ubuntu использовались windows версии npm и node. Это не очень удобно и хотелось бы делать все из WSL. В качестве примера такого поведения можно привести Visual Studio Code от Microsoft. С установленным надстройкой Remote-WSL я могу запустить команду code внутри WSL Ubuntu, и VSCode откроется в Windows.

Вот мой вопрос: Есть ли способ связать команды в WSL Ubuntu с системой Host Windows точно так же, как это делается с VSCode? В идеале я хотел бы иметь что-то подобное в моем WSL Ubuntu: windows-npm i, windows-node app, который будет запускать npm и node в системе хоста Windows вместо тех же команд в WSL Ubuntu.

1 Ответ

1 голос
/ 05 июня 2020

Проблема почти не привлекает внимания, поэтому я решил исправить сам. Я все еще ищу лучшее / собственное решение, но вот обходной путь, который я придумал.


WSL-Link

Позволяет пользователям WSL запускать любые Команды CMD в системе хоста Windows из подсистемы linux.

Требования

  • Windows 10
  • WSL
  • Node.js
  • NPM

Узел и NPM должны быть установлены как в подсистеме linux, так и в хост-системе Windows.

Установить

wsl-link должен быть установлен отдельно в подсистеме и на Windows хосте

В подсистеме linux:

npm i wsl-link -g

На Windows хосте:

npm i wsl-link -g

Windows Запуск

Для запуска сценария при запуске на windows Я использую PM2 с прилагаемым сценарием демона.

Установить pm2 и pm2- windows -startup на Windows host:

npm i pm2 pm2-windows-startup -g

Установить pm2-startup:

pm2-startup install

Запустить демон wsl-link pm2:

wsl-link-pm2

Сохранить список процессов pm2

pm2 save

Теперь вы можете подтвердить t если приложение wsl-link работает, с:

pm2 status

pm2 status display

Использование

На Windows стартовом сервере (если не используется настройка запуска с pm2 ):

wsl-link

Использовать в подсистеме linux (npm -v будет запущено на хосте Windows):

wsl-link npm -v

Case

On подсистема 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

Вы должны увидеть, что браузер Electron открыт на вашем Windows хосте.

Electron Running

...