错误:找不到模块“nan”

37

我正在开发一个本地的Node.js插件,并遵循nan文档(链接)

我在binding.gyp中包含了nan,如下所示: "include_dirs" : [ "<!(node -e \"require('nan')\")" ]

同时,nan也在npm依赖项中。

但是当我在另一个node模块中安装该软件包时,node-gyp会出现错误。

> nnb@1.0.2 install /Users/Shopgate/sandbox/stress/node_modules/nnb
> node-gyp rebuild

module.js:338
    throw err;
          ^
Error: Cannot find module 'nan'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at [eval]:1:1
    at Object.exports.runInThisContext (vm.js:74:17)
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:460:26)
    at evalScript (node.js:431:25)
    at startup (node.js:90:7)
gyp: Call to 'node -e "require('nan')"' returned exit status 1. while trying to load binding.gyp

我遇到了相同的错误。并且 npm install nan 也失败了,报错为:npm ERR! Cannot read property 'target' of null - cuixiping
7个回答

72

在我的情况下,这是由于 package-lock 文件中缺少一些依赖项引起的。我通过删除文件并再次运行 $ npm install 命令来解决了这个问题。


3
这对我也有帮助。将一个从Windows机器提交的存储库克隆到Mac上。不知道这是否与此有关。 编辑:错别字。 - Dewald Els

33

全局安装 nan

npm i -g nan

然后执行以下命令:

export NODE_PATH=$(npm root -g)


6
如果你能补充一些细节,例如你的工作环境、问题的原因等,说明问题是如何解决的,那就太好了。这样我们就可以更好地理解问题所在以及你的答案如何帮助解决它。 - Manfred
1
你的回答实际上解决了我们这个问题。不过,如果能够理解为什么会这样就更好了... - Manfred
我应该添加一些总是导出该节点路径的内容吗? - tofutim

21

如果您先安装nan,这并不理想,但它可以正常工作。

$ npm install nan

nan 可能是一种间接依赖项。执行 npm install nan 将修改 package.json。这可能是需要的,也可能不是需要的。将 nan 添加为直接依赖似乎是一个可行的解决方法。 - Manfred

8
我曾在使用node.js版本v12.18.3和npm 6.14.6时遇到过这个错误。
升级到包含npm 6.14.10的node.js版本v14.15.4后,问题得到解决。升级后npm install成功运行。
不需要以任何方式安装nan

这个方法结合删除 package-lock.json 对我有用。我先尝试了删除 package-lock.json,但没有帮助。所以客观地说,我不能说不删除 package-lock.json 就无法使其工作,但我的直觉是删除锁定文件已经过时了。 - Ogier Schelvis

0

很不幸,我遇到了这个问题,任何包含“npm”的内容都会立即返回错误。

module.js:471
    throw err;
    ^

Error: Cannot find module 'number-is-nan'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npmlog/node_modules/gauge/node_modules/string-width/node_modules/code-point-at/index.js:2:19)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
cd: no such file or directory: /npm

我不得不删除我的 node 和 npm 文件

我遵循的卸载和重新安装指南在这里(stackoverflow):

如何完全卸载 Node.js 并从头开始重新安装(Mac OS X)

然后我一路跟着问题的线索走到最后!

不要在第一次遇到问题时立即转到 SO(stackoverflow),命令行窗口(cli)“奇妙地”会给您所有正确的答案(但我遇到了大约 2 个障碍,需要参考 SO,主要是为了保险起见)。

-- 我遇到了一个 Python 框架文件放置位置的问题,这使得 homebrew 抛出警告解决方法

-- 还有一个 kegs 链接警告我自己在这里解决了

  • 然后当我需要运行:brew install node

-- 我又遇到了一个brew link问题,很容易解决,因为我之前写的关于kegs链接警告的内容只需要再次按照步骤操作即可。

然后我收到了一个错误提示,说我不能brew link --overwrite node那个文件(如果我没记错的话,是权限或其他什么问题,总之在这里解决)。

最后

  • 到这一步时,一切都正常工作了。 -- 记住!在这之间有简单的步骤,我只需按照命令提示在cli中执行,例如:

  • brew要求我通过给定路径删除文件:

-- 打开finder> [在MacBook“监视器工具栏”顶部] 转到>转到文件夹...>复制&粘贴由brew在cli窗口中提供的路径>它会找到该目录/文件,然后删除相应的目录/文件

-- 按照这些步骤继续操作,直到brew update完全满意为止。

  • 正如我所说,这最后一部分只是直接遵循brew响应的简单操作。

  • 我希望这个演示能够帮助某些人更快地解决我遇到的问题,并感谢社区花费时间帮助我找到了本答案中链接的解决方案。

  • 不要为代码错误而哭泣,继续支持社区。


0
如果我使用纱线,它对我来说有效。
yarn add nan 

0

我有点晚参加派对。但是对我有效的方法是使用rm -rf node_modules && npm install重新安装所有的node_modules


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接