错误:找不到模块“nan”
Posted
技术标签:
【中文标题】错误:找不到模块“nan”【英文标题】:Error: Cannot find module 'nan' 【发布时间】:2016-03-31 14:24:00 【问题描述】:我正在开发原生 Node.js 插件并关注 nan docs
我将 nan 包含在 binding.gyp 中,例如:
"include_dirs" : [ "<!(node -e \"require('nan')\")" ]
另外 nan 在 npm 依赖中。
但是当我在另一个节点模块中安装包时,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
【参考方案1】:
不理想,但如果你先安装 nan 就可以了。
$ npm install nan
【讨论】:
nan
可能是间接依赖。然后执行npm install nan
将修改package.json
。这可能需要也可能不需要。不过,将 nan
添加为直接依赖项似乎是一种有效的解决方法。【参考方案2】:
不幸的是,我遇到了这个问题,其中包含“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
我不得不删除我的节点和 npm 文件
我遵循的卸载和重新安装说明在这里(***):
How do I completely uninstall Node.js, and reinstall from beginning (Mac OS X)
然后我在每一期都跟着兔子的踪迹!
不要在出现摩擦的第一个迹象时立即跳转到 SO (***),命令窗口 (cli) 将“奇怪地”为您提供所有问题的正确答案(但我确实遇到了我提到的大约 2 个障碍为,主要是为了安全起见)。
在通过Install Node.js and npm with Homebrew 安装节点、npm 和 grunt 时。-- 我遇到了一些摩擦,因为 python 框架文件位于使自制软件抛出警告 resolve with 的地方。
--还有一个小桶链接警告resolved with my own write up here。
然后当我需要运行时:brew install node
-- 我有另一个brew link issue
,很简单,因为我在上面写的关于小桶链接警告的文章只需要再次遍历,所以我想。
然后我收到一条错误消息,说我不能 brew link --overwrite node
那个文件(特权或其他东西,如果我记得的话,不过是 resolved here)。
终于
此时一切运行良好。 - 记住!中间有一些简单的步骤,我实际上只是按照 cli 中的命令提示进行操作,例如:
brew 想要我通过给定路径删除文件:
-- open finder> [在 MacBook “监视器工具栏”的顶部] 转到>转到文件夹...>在 cli 窗口中复制并粘贴 brew 提供的路径>它将找到该目录/文件然后删除适当的目录/文件
-- 继续这些步骤,直到完全满意 brew update
。
正如我所说,这最后一部分只是简单地直接遵循 brew 响应的指示。
我希望本演练可以帮助某人更快地绕过我遇到的问题,并感谢社区花时间帮助我解决我在此答案中链接到的解决方案。
李>不要为溢出的代码哭泣,继续支持社区。p>
【讨论】:
【参考方案3】:我参加聚会有点晚了。但是对我有用的是使用rm -rf node_modules && npm install
重新安装所有node_modules
【讨论】:
【参考方案4】:全局安装nan
:
npm i -g nan
然后,
export NODE_PATH=$(npm root -g)
【讨论】:
如果您可以添加一些详细信息为什么可以解决问题,那就太好了,例如在什么环境下工作,导致问题的原因等。这样我们都可以更好地理解为什么会出现问题以及您的回答如何帮助解决问题。 您的回答实际上解决了我们案例中的问题。不过,最好能理解为什么...... 我应该添加一些始终导出该 node_path 的内容吗?【参考方案5】:就我而言,这是因为package-lock
文件中缺少一些依赖项。我通过删除它并再次运行$ npm install
来解决它。
【讨论】:
这对我也有用。将 Gitlab 中的存储库克隆到在 Windows 机器上提交的 Mac。不知道是不是跟这个有关系。编辑:错字【参考方案6】:我在 node.js 版本 v12.18.3 和 npm 6.14.6 中遇到了这个确切的错误。
升级到 node.js 版本 v14.15.4(包括 npm 6.14.10)解决了这个问题。 npm install
升级后运行成功。
无需以任何方式安装nan
。
【讨论】:
这与删除 package-lock.json 相结合对我有用。我首先尝试删除 package-lock.json ,但这没有帮助。所以我不能客观地说我不必为了这个工作而删除 package-lock.json,但我的直觉是删除锁定文件已经过时了。以上是关于错误:找不到模块“nan”的主要内容,如果未能解决你的问题,请参考以下文章