我的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相关问答推荐

即使DDB键不存在, node Lambda也不会失败,并返回NULL作为结果

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

无法从MongoDB文档中保存的对象数组中获取对象的属性

如何使用NodeJS在mongodb中更新文档

在 TypeScript 中正确键入 MongoDB find 方法

将图像添加到多个产品的条带 checkout 会话中

几个 lambda 共有的函数

如何使用Next.js/Node/TS正确地上传至S3

无法通过 NextJS 访问 HTTP 帖子中的正文

NodeJS `request` 库无法通过 multipart-form-data 将文件发布到 dotnet 服务器

如何使用包含条件正确分页的 sequelize 查询?

如何使用对象中的常量值验证字符串字段?

如何使用 Remix 仅在客户端呈现组件?

users.watch(在 gmail google api 中)如何收听通知?

yarn.lock 和 npm 的 package-lock 有什么区别?

容器之间的 Docker HTTP 请求

添加git信息到create-react-app

Node.js 支持 =>(箭头函数)

Puppeteer:如何提交表单?

如何使用 cookie 创建 HTTP 客户端请求?