在解压缩二进制tarball之后,Node无法找到npm的依赖模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在解压缩二进制tarball之后,Node无法找到npm的依赖模块相关的知识,希望对你有一定的参考价值。

我从这里下载了最新的Node LTS Linux x86二进制tarball:

https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x86.tar.xz

并在此处提取:

/home/paul/dev/node-v8.12.0-linux-x86

我在我的路径中添加了Node的bin /目录:

$ echo $PATH
/home/paul/dev/node-v8.12.0-linux-x86/bin:/usr/local/bin:/usr/bin:/bin

并且Node运行良好:

$ node -v
v8.12.0

但是,当运行与Node二进制tarball捆绑的npm时,我得到:

$ npm -v
module.js:550
    throw err;
    ^

Error: Cannot find module 'semver'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/lib/utils/unsupported.js:2:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

启用模块的调试显示其搜索的路径以查找semver模块:

MODULE 19001: Module._load REQUEST semver parent: /home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/lib/utils/unsupported.js
MODULE 19001: looking for "semver" in ["/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/lib/utils/node_modules","/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/lib/node_modules","/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/node_modules","/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules","/home/paul/dev/node-v8.12.0-linux-x86/node_modules","/home/paul/dev/node_modules","/home/paul/node_modules","/home/node_modules","/node_modules","/home/paul/.node_modules","/home/paul/.node_libraries","/home/paul/dev/node-v8.12.0-linux-x86/lib/node"]

在那里,我看到这条道路:

/home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/node_modules

这是semver模块所在的位置(作为npm的依赖模块):

$ ls -al /home/paul/dev/node-v8.12.0-linux-x86/lib/node_modules/npm/node_modules/semver
total 80
drwxr-xr-x   3 paul paul   125 Sep 29 11:01 .
drwxr-xr-x 351 paul paul 12288 Sep 10 15:23 ..
drwxr-xr-x   2 paul paul    27 Sep 10 15:23 bin
-rw-r--r--   1 paul paul   765 Feb 10  2018 LICENSE
-rw-r--r--   1 paul paul  1598 Aug 17 17:42 package.json
-rw-r--r--   1 paul paul   619 Aug 17 17:42 range.bnf
-rw-r--r--   1 paul paul 14655 Aug 17 17:42 README.md
-rw-r--r--   1 paul paul 36503 Aug 17 17:42 semver.js

那么为什么Node不能解析npm的semver模块呢?

为了好玩,我尝试了支持x86的最新9.x版本,它仍然失败,但给出了不同的消息:

$ node -v
v9.11.2

$ npm -v
internal/modules/cjs/loader.js:550
    throw err;
    ^

Error: Cannot find module '/home/paul/dev/node/bin/npm'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:548:15)
    at Function.Module._load (internal/modules/cjs/loader.js:475:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
    at startup (internal/bootstrap/node.js:201:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)

Node的模块分辨率肯定会有所提升。

谢谢! - 保罗

答案

我遇到了与create-react-app相同的问题我不知道如何添加'sudo'对我有用。

$ npm开始

--->给出与你相同的错误

$ sudo npm start

--->工作完美

希望它能解决你的问题

以上是关于在解压缩二进制tarball之后,Node无法找到npm的依赖模块的主要内容,如果未能解决你的问题,请参考以下文章

lodop安装后无法打印

sh 将文件系统备份到当前目录为压缩tarball

在重命名根目标时解压缩包含单个根目录的 tarball

sh 将远程tarball中的文件解压缩到已存在的目录中

使用 fs.existsSync ...我无法将输出设为 true ...(已编辑)

如何在node js中解压二进制数据