在循环依赖中访问模块导出的不存在的属性“padLevels”

dbl*_*bld 21 node.js npm

我只是> npm i -g phonegap@9.0.0> phonegap --version
它不仅说9.0.0而且还说:

(node:18392) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
Run Code Online (Sandbox Code Playgroud)

当我> node --trace-warnings ...,我得到这个:

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

Error: Cannot find module 'C:\Users\twori\...'
[90m    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)[39m
[90m    at Function.Module._load (internal/modules/cjs/loader.js:725:27)[39m
[90m    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)[39m
[90m    at internal/main/run_main_module.js:17:47[39m {
  code: [32m'MODULE_NOT_FOUND'[39m,
  requireStack: []
}
Run Code Online (Sandbox Code Playgroud)

我只安装并检查版本。为什么phonegap模块会抛出这个错误?
我的老师和其他学生对此很满意,但只有我无能为力。

Shu*_*m P 37

解决根本原因

循环依赖中的导出

这句话提示我解决了同样的问题,似乎较新的 NodeJS 版本不再允许循环依赖。

例如 - 有两个文件 - FileA.js, FileB.js

FileA.js

const FileB = require("FileB");
Run Code Online (Sandbox Code Playgroud)

FileB.js

const FileA = require("FileA");
Run Code Online (Sandbox Code Playgroud)

通过修改 FileA.js 或 FileB.js 删除这些循环依赖项之一后,它解决了!

  • 您如何找到哪些文件具有循环依赖关系? (6认同)
  • 请注意,这是一个文件直接相互需要的示例,但依赖关系仍然可以间接存在。例如,FileA 可能不需要 FileB,但 FileA 可以依赖于 FileC,而 FileC 又依赖于 FileB......仍然导致循环依赖。 (2认同)

小智 13

我发现这种安排对错误没有影响,当我在另一个文件中调用该函数时,我调整了Javascript解构,它神奇地解决了问题。

我只是改变了从 Main.js 导出函数的方式

从:

module.exports = { Scan };
Run Code Online (Sandbox Code Playgroud)

到:

exports.Scan = Scan
Run Code Online (Sandbox Code Playgroud)

在 Event.js 中,我能够像这样访问该文件

const main = require("./Main.js");
let result = main.Scan();
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,我希望它可以帮助其他开发人员


ans*_*son 6

节点版本太高。之前用的是最新用的14+版本。切换回12版本后就没有这个问题了。

Mac 命令

sudo n 12.0.0
Run Code Online (Sandbox Code Playgroud)

  • 如果你还没有“n”,那么首先“npm install -gn”。另外,我认为你不必 sudo (6认同)
  • 另外,nvm 是一个很棒的节点版本管理器 (6认同)
  • 你不应该在 npm 命令上使用 `sudo` (3认同)