当前位置: 首页 > 知识库问答 >
问题:

Windows Subsystem for Linux(WSL)使用共享node.js安装与Windows:node.js npm和npx二进制文件不工作

颛孙霖
2023-03-14

我最近转到了一个Windows+WSL环境(顺便说一下,WSL非常好)。这样做的主要原因是有一个Linux环境进行开发,并有一个Windows用于其他应用程序和游戏,而不需要重新启动我的计算机(之前有一个双引导设置)。

在安装过程中,我发现大多数Windows安装的二进制文件都可以从WSL执行。因此,不需要重复安装(例如:在Windows中安装java和maven以便使用Eclipse IDE,然后在WSL中单独安装它以便在终端中使用),我可以只在Windows中安装java jdk,并将二进制文件符号链接到WSL以便共享jdk安装,这样做是完美无缺的)。但是对node做同样的操作,会发生node npm和npx二进制文件不工作的情况:(

我想有一个单一的节点安装,我可以管理使用nvm窗口。于是我以以下方式开始安装

在WSL中,我按照Nick Janetakis的指南(谢谢Nick)配置了我的/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
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
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

太棒了!(注意:由于node安装在windows上,所以当node安装在WSL上时,您必须在磁盘驱动器中使用它,在本例中为/D)。但是...

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,该路径是windows路径中npm符号链接位置的有线混合。

有没有一种方法告诉NPM/NPX它必须从WSL找到它的文件的正确的Windows路径?

很抱歉问了这么长的问题,但由于非常特殊的设置,我认为语境化是必要的。

共有1个答案

壤驷阳冰
2023-03-14

有什么办法吗?我遇到过同样的情况,我希望在WSL和Windows之间共享相同的节点和npm,因为我希望同时在终端(WSL)和IDEA(Windows)中运行它们。

我发现无法通过drviers运行npm,就像在C:/下使用npm,而该npm已安装在F:/下,导致错误:

internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'C:\f\Users\aleen\AppData\Roaming\nvm\v10.21.0\node_modules\npm\bin\npm-cli.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

但是,我们总是在一个驱动程序中工作,这意味着我们可以在常用驱动程序下安装npm(f:/,对我来说),并创建一个别名,通过相对路径在驱动程序中运行它:

# ~/.bash_aliases
function npm() {
  $(realpath --relative-to="$(pwd)" /mnt/f/Program\ Files/nodejs)/npm $@
}
export -f npm
 类似资料:
  • 我尝试在eclipse中使用二进制文件安装Tomcat服务器,当我运行cmd并运行启动命令时,cmd打开和关闭,这些写在cmd屏幕上: (startup.bat也尝试过,但行为相同) > 当我运行此命令时: 卡塔琳娜。短跑 java版本“15.0.2”2021-01-19 java(TM)SE运行时环境(构建15.0.2 7-27) java热点(TM)64位服务器虚拟机(构建15.0.2 7-2

  • null 在列出的3个选项中,只有最后一个可以使用projectile(可能还有其他Emacs包)。但我需要能够访问/修改文件从Windows以及,所以这不是一个可行的选择。 有没有人为此找到好的解决方案?

  • 本安装说明是提供给那些想在多种环境中安装 Docker 的 hacker 们的。 在进行安装之前,请检查你的 Linux 发行版本是否有打包好的 Docker 安装包。我们已经发布了许多发行版包,这样会节省您很多时间。 检查运行时的依赖关系 如果想要 Docker 正常运行,需要安装以下软件: iptables version 1.4 or later Git version 1.7 or lat

  • 有几种方法可以与node.js共享PHP会话。 上述两种方法都需要: 1)运行另一台服务器。 2)更改默认的PHP会话处理程序。 为什么我不应该使用默认的PHP会话处理程序,并通过使用'fs'(文件系统)核心库读取node.js中的文件内容来访问会话文件? 假设服务器之间不应该进行远程操作,那么除了速度之外,还有什么其他原因不直接访问和读取会话文件呢?

  • Node 安装 官网:https://nodejs.org 官网下载:https://nodejs.org/zh-cn/download/ 历史版本下载:https://nodejs.org/zh-cn/download/releases/ 此时(20171212) Maven 最新版本为:8.9.3 (includes npm 5.5.1) 官网安装教程:https://nodejs.org/e

  • 我正在将一个CLI库从Ruby移植到Node.js。在我的代码中,我会在必要时执行几个第三方二进制文件。我不确定如何在Node中最好地完成这一点。 下面是Ruby中的一个示例,我调用PrinceXML将文件转换为PDF: 节点中的等价代码是什么?