在 Manjaro 上的 nvm 中运行节点时出现问题 - 可能是操作系统级别错误,但不确定,因为我是初学者

在 Manjaro 上的 nvm 中运行节点时出现问题 - 可能是操作系统级别错误,但不确定,因为我是初学者

我加入来问这个问题,因为它看起来不像堆栈溢出问题。

问题:在 nvm 上运行的 Node 和 npm 安装并正常工作,但当我收到错误时,(我已经尝试过)没有任何效果。我怀疑这些错误是在操作系统级别(权限或文件问题),但我不确定如何解决这些问题。您能否告诉我出了什么问题(如果下面有足够的信息)或在哪里寻找解决方案(如果下面的信息不够或不正确)。

我已经使用 Manjaro 一段时间了,但我仍然是 Linux 的初学者。我一直在使用 NVM 来管理多个 Node.js 版本,不久前它停止工作了。我有时只使用我的计算机,我以为这是一些节点问题,但今天我进去并完全删除了 nvm/node,然后重新安装了它们。然后我尝试启动一个标准的 NUXT 应用程序,但失败了,所以我认为它是在操作系统级别。

我安装了 NVM,然后安装 LTS 节点(12.14),然后尝试一个新的 nuxt 项目:

npx create-nuxt-app test

回答所有问题,灌输开始...很多错误 - 但它结束了...错误示例:

../lib/kerberos.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Kerberos::AuthGSSServerStep(Nan::NAN_METHOD_ARGS_TYPE)’:
../lib/kerberos.cc:802:44: error: no matching function for call to ‘v8::Value::ToObject()’
  802 |   Local<Object> object = info[0]->ToObject();
      |                                            ^
In file included from /home/un/.cache/node-gyp/12.14.0/include/node/node.h:63,
                 from ../lib/kerberos.h:4,
                 from ../lib/kerberos.cc:1:
/home/un/.cache/node-gyp/12.14.0/include/node/v8.h:2576:44: note: candidate: ‘v8::MaybeLocal<v8::Object> v8::Value::ToObject(v8::Local<v8::Context>) const’
 2576 |   V8_WARN_UNUSED_RESULT MaybeLocal<Object> ToObject(
      |                                            ^~~~~~~~
/home/un/.cache/node-gyp/12.14.0/include/node/v8.h:2576:44: note:   candidate expects 1 argument, 0 provided

node-gyp 似乎是错误中的常见项目,并且 npm 页面说它是“用于为 Node.js 编译本机插件模块”,这就是为什么我认为这是操作系统级别的问题。

所以应用程序已设置,但是当我尝试运行时

npm run dev

我得到以下信息:


> [email protected] dev /home/un/test
> nuxt

sh: /home/un//test/node_modules/.bin/nuxt: Permission denied
npm ERR! code ELIFECYCLE
npm ERR! errno 126
npm ERR! [email protected] dev: `nuxt`
npm ERR! Exit status 126
npm ERR! 
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/un/.npm/_logs/2020-01-03T15_35_00_168Z-debug.log

对于那些不熟悉 node/npm/NUXT 的人请注意:这只是标准的灌输过程。我这里没有自定义代码,这是很多人一直用来启动项目的代码,所以我无法理解为什么它不起作用(特别是当它曾经起作用时)。

我想知道“权限被拒绝”是否意味着这是一个用户访问问题,但我不知道如何检查。

在进行系统更新时,我还收到一些有关文件较新的错误。

我将不胜感激任何帮助。如果您没有解决方案,那么至少可以提供一些关于可能出现问题或在哪里寻找解决方案的建议。

如果您需要任何其他信息,请告诉我。

还不确定要添加哪些其他标签?文件错误、灌输、更新问题

编辑:文件权限:.nvm/versions/v12.14.0中的节点是-rwxr-xr-x,而npm和npx是lrwxrwxrwx,它使用-rwxr-xr-x链接到实际的npm,但实际的npx是-rw-r --r-- (用户没有可执行文件)但我从未更改过这些,就像我说的,它曾经有效。 node_modules 中的每个文件夹都有 drwxr-xr-x,我查看了一个文件夹,js 文件是 -rw-r--r-- (但我认为因为它们是 JavaScript,所以不需要执行...

Edit2:我刚刚注意到我的node_modules文件夹中没有.bin文件夹,并且根本没有nuxt文件夹,但我认为这将是一个文件未找到错误而不是“权限被拒绝”。

然后我尝试chmod 775 -R node_modules再次运行构建。这次它创建了 .bin 文件,但在 webpack 上仍然失败(node_modules/.bin/webpack:权限被拒绝),尽管此链接是 lrwxrwxrwx 并且原始文件是 -rwxrwxr-x

虽然这使事情发生了变化,但我仍然无法启动该项目。我也认为这不是处理这个问题的正常方法。如果是,该网站会说这是一个要求。

答案1

正如您想知道的那样,我认为这是一个许可问题。尝试检查您所在的用户是否可以执行文件/home/un//test/node_modules/.bin/nuxt,并检查该文件夹是否/home/un//test/node_modules/.bin/没有设置 SUID 或/和 SGID 位。我想不会,因为 node_modules 文件夹是由 npm 自动生成的,但我认为您应该根据将要运行该服务的用户帐户递归地授予整个目录的权限。

答案2

好吧,这个问题不是我所期望的。我的节点文件位于 btrfs 硬盘上。看来这就是它不起作用的原因。

我已将它们移到那里,但我认为它仍在工作,要么这是一个错误,要么它开始不起作用。

无论如何,将文件移动到我的主硬盘(ext4)已经解决了这个问题。

相关内容