我的wsl2(ubuntu 20.04)设置为使用root用户.

我可以安装任何不需要脚本即可运行的 node 包.如果它确实需要像node-sass包这样的脚本,那么我会得到错误:

sh: 1: node: Permission denied

npx命令也会发生同样的情况,例如:

# npx npkill
/tmp/npx-a435a586.sh: 1: npkill: Permission denied

这里有许多线程表示修复方法是设置这些值:

npm config set user 0
npm config set unsafe-perm true

但这并没有改变行为,同样的错误也会发生.我try 过删除 node 模块,也使用了--unsafe-perm标志,但仍然有相同的错误.我还try 在更改 node 设置后重新启动.

我的版本:

  • node :v16.13.2
  • npm:8.15.0
  • wsl:Ubuntu-20.04

还有什么我可以试试的吗?

推荐答案

我知道说它对我来说似乎没有帮助,但希望通过浏览我所做的,并将其与您的安装进行比较,我们可以发现可能会给您带来问题的差异.

在WSL2上新安装的Ubuntu 20.04(发行名为"Ubuntu")上:

sudo apt update && sudo apt upgrade -y

# Since you mention that you have set your user to be root:
sudo sh -c 'echo "[user]\ndefault=root" > /etc/wsl.conf'

wsl.exe -l -v
# Confirm your distribution name for the following command:
wsl.exe --terminate Ubuntu

重新启动WSL,用户现在是root:

# Use n version manager -- Just my personal preference:
curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n
bash n 16.13.2
npm install -g npm@8.15.0

npm install -g npkill
npx npkill

它按预期工作.


如果您想在一个"干净"的发行版上测试它(不干扰您现有的发行版,您可以进行比较),您可以执行以下操作.首先,在管理PowerShell中:

Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\*' |
Where-Object {$_.Name -eq 'install.tar.gz' } |
% { $_.FullName }

将分发路径复制到剪贴板以备将来使用.它应该是这样的:

C:\Program Files\WindowsApps\CanonicalGroupLimited.UbuntuonWindows_2004.2022.1.0_x64__79rhkp1fndgsc\install.tar.gz

回到"普通用户"PowerShell会话:

# Adjust paths/names as desired
mkdir $env:userprofile/WSL/instances/TestUbuntu
wsl --import TestUbuntu $env:userprofile/WSL/instances/TestUbuntu "<path_copied_above_in_quotes>" --version 2
wsl ~ -d TestUbuntu

Node.js相关问答推荐

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

在Node.js下使用PostgreSQL客户端聚合PostgreSQL中的用户定义类型

我的Node.js应用程序没有将Mongoose方法findByIdAndDelete作为函数进行检测

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

MongooseError[MissingSchemaError]:尚未为模型注册架构

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

下一个API路由如何处理多个并发请求?

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

yarn 安装失败,因为 node-gyp 正在寻找过时的 node 版本标头

BrowserRouter 无法渲染组件

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

在 NodeJS/ESP32 中通过 WebSocket 发送二进制数据 - 如何识别二进制和文本消息

等到文件上传完成的有效方法(mongoose )

如何promise AWS JavaScript 开发工具包?

Node.js 变量声明和范围

为什么 JavaScript 的 parseInt(0.0000005) 打印5?

带有加密的nodejs中的SALT和HASH密码

如何在 node 中找到引用站点 URL?

nodejs:Ajax 与 Socket.IO,优缺点

Firestore:多个条件 where 子句