Я недавно перешел в среду Windows + WSL (кстати, WSL идет очень хорошо).Основная причина для этого состоит в том, чтобы иметь среду разработки Linux и иметь Windows для других приложений и игр без перезагрузки компьютера (ранее была настроена двойная загрузка).
В процессе установки янайдено, что большинство установленных двоичных файлов Windows могут быть выполнены из WSL.Таким образом, вместо дублирования установок (например, установка java и maven в Windows для использования Eclipse IDE, а затем установка его в WSL отдельно для использования его в терминале), я мог бы просто установить java jdk в Windows и символически связать двоичные файлы с WSL по порядкучтобы поделиться установкой JDK, это работало без нареканий). Но, делая то же самое с узлом, случается, что двоичные файлы узла npm и npx не работают: (
Я хотел иметь установку с одним узлом, которой я мог бы управлять, используя nvm windows. Поэтому я запустил установку следующим образом:
В WSL я настроил свой / etc / wsl.conf , следуя Руководство Ника Ника Джанетакиса (спасибо Ник ) за монтирование дисков Windows на / вместо / mnt / :
/ etc / wsl.conf
[automount]
root = /
options = "metadata"
Затем установил узел в windows:
C:\Windows\system32> nvm install 10.15.0
... installing process...
C:\Windows\system32> nvm use 10.15.0
...success message...
C:\Windows\system32> node -v
v10.15.0
C:\Windows\system32> npm -v
6.4.1
Пока все работает как надо. Следующий шаг - это символическая ссылка на двоичные файлы узла Windows на WSL. Эти двоичные файлы расположены по адресу:
C:\Windows\system32> where node
C:\Program Files\nodejs\node.exe
C:\Windows\system32> where npm
C:\Program Files\nodejs\npm
C:\Program Files\nodejs\npm.cmd
C:\Windows\system32>where npx
C:\Program Files\nodejs\npx
C:\Program Files\nodejs\npx.cmd
Итак, внутри терминала WSL (помните, что мои диски монтируются в / c, а не / mnt / c в качестве поведения по умолчанию):
user@host:~$ mkdir ~/bin
user@host:~$ ln -s /c/Program\ Files/nodejs/node.exe ~/bin/node
user@host:~$ ln -s /c/Program\ Files/nodejs/npm ~/bin/npm
user@host:~$ ln -s /c/Program\ Files/nodejs/npx ~/bin/npx
И ...
user@host:/d/tmp$ node -v
v10.15.0
user@host:/d/tmp$ echo "console.log('Hello World');" >> index.js
user@host:/d/tmp$ node index.js
Hello World
Отлично! ( Примечание: , так как узел установлен в Windows, когда вы находитесь на WSL, вы должны использовать его внутри дисковода, / d в этом cаза).Но ...
user@host:~$ npm -v
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module 'C:\home\user\bin\node_modules\npm\bin\npm-cli.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Вот почему я пишу это.Ошибка ясна, npm пытается найти npm-cli.js в пути, который представляет собой проводную смесь местоположения символической ссылки npm внутри пути Windows.
Есть ли способ сообщить npm / npx правильныйПуть в Windows, где он должен найти свои файлы из WSL?
Извините за длинный вопрос, но из-за особой настройки я посчитал эту контекстуализацию необходимой.