繁体   English   中英

dyld:找不到符号:_napi_module_register

[英]dyld: Symbol not found: _napi_module_register

昨晚让我的节点与 VS Code 调试器一起工作没问题。 除了安装 npm mysql 包之外,我没有触及任何东西。

我今晚回来并抛出这个错误:

Debugger listening on [::]:49952
dyld: lazy symbol binding failed: Symbol not found: _napi_module_register
  Referenced from: /Users/adamsawyers/node_modules/bufferutil/prebuilds/darwin- 
 x64/node-napi.node
  Expected in: flat namespace
dyld: Symbol not found: _napi_module_register
  Referenced from: /Users/myusername/node_modules/bufferutil/prebuilds/darwin- 
 x64/node-napi.node
  Expected in: flat namespace

显然,我安装的 n(npm 中的节点版本处理包)以某种方式被破坏了。 我的研究告诉我 napi_module_register 是 n 包的一部分,但我不确定它是如何搞砸的,尤其是因为我昨晚让它工作了。

我尝试重新安装我的节点包,重新安装 n,重建项目文件结构,甚至重新启动我的计算机。 到目前为止,一切都没有奏效。

有什么建议?

显然 VS 代码不喜欢 nodejs 的 v6.10.3,我正在运行它以在 AWS 中创建 lambda 函数(即 AWS 指定的版本)

我使用 N 包来管理我的节点版本。 在 2018 年 7 月 25 日切换到最新版本 10.7.0(命令:sudo n latest)并在 VS 代码中重新运行调试器后,它运行良好

我仍然不确定是什么原因,但希望其他人发现这个解决方案有帮助

这个确切的错误发生在我身上,因为:

  1. 我需要socket.io在 Node 上运行
    • 这又需要ws (Node 上的 websockets)
  2. 另外,我需要在过时的 Node 版本(Node 7)上运行这个有一个很好的理由(相信我,如果我不需要的话,我不想这样做)
  3. 但是,尝试在旧版本上使用它会导致上述错误消息。

解决方案

这是一个糟糕的解决方案,但至少我让它起作用了。

经过一番研究,我没有找到很好的解决方案。 但是,仔细查看源代码会发现index.js旁边有一个fallback.js ,它实现了与本机构建相同的功能,但不需要构建。 这可能会显着减慢速度,但至少它有效:

  1. yarn add module-alias
  2. 用这个前缀你的实际代码(例如通过node -r fallbacks.js ):
// fallbacks.js
const moduleAlias = require('module-alias');

const dependencyRoot = getDependencyRoot(); // whatever is your root folder, maybe __dirname + '..'

moduleAlias.addAlias('bufferutil', dependencyRoot + '/node_modules/bufferutil/fallback.js');
moduleAlias.addAlias('utf-8-validate', dependencyRoot + '/node_modules/utf-8-validate/fallback.js');


// run actual code here...

PS:就我而言,为了让ws能够在 Node 7 上运行,我还必须对它进行 babel,因为它使用的是现代语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM