簡體   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