【问题标题】:Node - was compiled against a different Node.js version using NODE_MODULE_VERSION 51Node - 使用 NODE_MODULE_VERSION 51 针对不同的 Node.js 版本进行编译
【发布时间】:2018-03-05 04:57:02
【问题描述】:

我正在终端上运行节点应用程序。最近升级到节点 v8.5.0,但出现此错误:

Error: The module '/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (module.js:653:18)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/tidee/tidee-au/packages/tidee-au-server/node_modules/babel-register/lib/node.js:152:7)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/server/helpers/encryptPass.js:1:16)

知道如何解决这个问题吗?

【问题讨论】:

  • 请标记正确答案

标签: node.js npm version node-modules


【解决方案1】:

我来到这里是因为我在 vscode 中遇到了 quokka.js ext 的错误。

我的解决方案: (通过终端在 Mac 上)

1- 我去了~/.quokka

2- 我跑了nano config.json

3- 我将 config.json 中的代码复制到一个单独的文件中

4- 我删除了 config.json 中的代码

5- 我停止并重新启动 Quokka。

6- 在确认 Quokka 正常工作后,我删除了 config.json 文件代码。

【讨论】:

    【解决方案2】:

    这对我有用。我正在使用带有 Electron Js 的 looped-back 节点模块并遇到了这个问题。在尝试了很多对我有用的事情之后。

    scriptspackage.json 文件中添加以下行:

      ... 
    "scripts": {
            "start": "electron .",
            "rebuild": "electron-rebuild"
        
          },
    ...
    

    然后运行以下命令npm run rebuild

    【讨论】:

      【解决方案3】:

      我删除了 node_modules 文件夹并运行 npm install,我的应用程序启动时没有任何错误。

      【讨论】:

        【解决方案4】:

        对于 Electron 模块,安装 electron-rebuild。

        Format:
        electron-rebuild -o <module_name> -v <electron version>
        
        Example:
        electron-rebuild -o myaddon -v 9.0.0-beta.6
        

        指定与当前目录安装的版本相同

        您可能有这样的经验,标准的 node-gyp 构建会报告为 64,然后基本的电子重建会报告 76,直到您添加 -v 的确切版本,它才会达到实际版本 80(对于 9.0.0 -beta.6)

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题,这里提到的没有对我有用。 这对我有用:

          1. 在由 electron 运行的 main.js 文件中需要所有依赖项。 (这对我来说似乎是第一个重要的部分)
          2. 运行npm i -D electron-rebuild 以添加electron-rebuild
          3. 删除node-modules 文件夹以及packages-lock.json 文件。
          4. 运行npm i 安装所有模块。
          5. 运行./node_modules/.bin/electron-rebuild(Windows 为.\node_modules\.bin\electron-rebuild.cmd)重建一切

          非常重要./node_modules/.bin/electron-rebuild 之后直接运行 npm i 否则它在我的 mac 上不起作用。

          我希望我能帮助一些沮丧的人。

          【讨论】:

          • 运行 electron-rebuild 为我完成了这项工作。就我而言,无需删除和重新安装模块。
          • 那么你很幸运@stoefln 不幸的是,在某些设置中一一执行这些确切步骤至关重要。
          • 我在 Windows 上,但这个解决方案也对我有用。你能解释一下导致这个问题的原因吗?这可能是 Electron 的错误吗?
          • @jbinvnt 是的,已知电子限制github.com/SimulatedGREG/electron-vue/issues/872
          • 如何通过管道或任何命令只运行电子重建
          【解决方案6】:

          我在电子应用程序中两次遇到此错误,结果发现问题是需要从主进程而不是渲染进程使用某些模块。使用 pdf2json 和 node-canvas 发生错误。将需要这些模块的代码从 index.htm(渲染进程)移动到 main.js(主进程)修复了错误,应用程序重新构建并完美运行。这不会在所有情况下都解决问题,但首先要检查您是否正在编写电子应用程序并遇到此错误。

          【讨论】:

            【解决方案7】:

            您只需运行以下命令:

            $ rm -rf node_modules
            $ rm -rf yarn.lock
            $ yarn install
            

            最后

            $ ./node_modules/.bin/electron-rebuild
            

            如果您的依赖项中不存在它,请不要忘记yarn add electron-rebuild

            【讨论】:

              【解决方案8】:

              原来我的问题是用户错误:确保您用于运行的节点版本与您在运行 npm install 或 yarn 时使用的版本相同。

              我使用 NVM 对节点进行版本控制,并通过终端运行 yarn,但我的 IDE 在运行时被设置为使用旧版本的节点,并且它抛出了上面的错误。将运行配置中我的 IDE 的 node 版本匹配到 node --version 解决了这个问题。

              【讨论】:

                【解决方案9】:

                运行 npm config set python python2.7 并再次运行 npm install,派对开始了。

                【讨论】:

                  【解决方案10】:

                  robotjs 也有类似的问题。有一些不推荐使用的代码需要节点 v11,但我已经在 v12 上编译了电子代码。所以我得到了基本相同的错误。 这里没有任何效果,因为我基本上是在尝试将电子和其他依赖项从 v12 重建到节点 v11 中。

                  这是我所做的(其中一部分是基于 chitzui 的回答,credit where credit is due):

                  • 备份 package.json
                  • 彻底删除 node_modules 文件夹
                  • 彻底删除 package_lock.json
                  • 删除 package.json(稍后会重新初始化)
                  • 关闭项目目录中所有打开的编辑器和其他 cmd 窗口。
                  • 运行 npm init 重新初始化包,然后使用旧备份的 package.json 丢失数据
                  • 运行npm i
                  • 已修复:)

                  希望这会有所帮助。

                  【讨论】:

                    【解决方案11】:

                    简单运行:

                    npm uninstall bcrypt

                    接着是:

                    npm install bcrypt(或 npm install,如果 bcrypt 在您的 package.json 文件中声明为依赖项)

                    【讨论】:

                      【解决方案12】:

                      就我而言,我运行的是nodejs 而不是node。由于包管理器正在安装nodejs

                      # which node
                      /home/user/.nvm/versions/node/v11.6.0/bin/node
                      
                      # which nodejs
                      /usr/bin/nodejs
                      

                      【讨论】:

                        【解决方案13】:

                        就我而言,我在我的办公室代理中跳过了一些包裹。当我走出办公室代理并尝试做npm install时,它起作用了。也许这对某人有帮助。

                        但我花了几个小时才确定这是原因。

                        【讨论】:

                          【解决方案14】:

                          你可以看到这个link

                          检查您的节点版本是否正确。使用 NODE_MODULE_VERSION 51 表示您的节点版本是 nodejs v7.x,需要 NODE_MODULE_VERSION 57 表示您需要将您的节点升级到 v8.x,因此您需要升级您的节点。然后你需要运行npm rebuild 命令来重建你的项目

                          【讨论】:

                          • 如果没有链接,答案本身应该会有所帮助。
                          • 在从 67 到 57 抱怨时遇到了类似的问题。在我的情况下,我在 Ubuntu 中使用 $ snap refresh node --channel=8/stable11/stable 降级到 8/stable。之后$ npm rebuild.
                          • 这个答案是错误的。 NODE_MODULE_VERSION 51 表示.node 文件是使用 NODE_MODULE_VERSION 51 针对某个节点版本编译的。用户使用的是使用 57 的节点版本,因此他不能直接使用它。用户应该重建编译。
                          【解决方案15】:

                          我刚刚在运行kadence 时遇到了这个错误,安装的“kadence”脚本首先检查 nodejs,并且只有在没有 nodejs 时才运行 node。我将最新版本的 node 链接到我的 ~/bin 目录,但 nodejs 运行的是我忘记卸载但直到现在才出现问题的旧版本。

                          所以有这个问题的人可能会检查 node 和 nodejs 是否真的运行相同版本的 node...

                          【讨论】:

                            【解决方案16】:

                            我遇到了同样的问题,但这些解决方案都不起作用,我不知道为什么,它们过去曾为我解决过类似的问题。

                            无论如何要解决问题,我只是使用 node-pre-gyp 手动重建包

                            cd node_modules/bcrypt
                            node-pre-gyp rebuild
                            

                            一切都按预期进行。

                            希望对你有帮助

                            【讨论】:

                              【解决方案17】:

                              检查您正在使用的节点版本,可能与预期不匹配。

                              【讨论】:

                                【解决方案18】:

                                可能是节点 JS 版本的不一致导致了问题。 As stated in the documentation。请务必使用其中一个 lts 版本。例如。在你的 Dockerfile 中指定:

                                # Pull lts from docker registry
                                FROM node:8.12.0
                                
                                # ...
                                

                                【讨论】:

                                  【解决方案19】:

                                  确保您只安装了一个版本的 NodeJS。试试这两个:

                                  node --version
                                  sudo node --version
                                  

                                  我最初是从源代码安装 NodeJS,但它是不正确的版本,并使用 nvm '升级'到最新版本,它不会删除任何以前的版本,只会在 /root/.nvm/versions/... 目录中安装所需的版本.所以sudo node 仍然指向以前的版本,而node 指向较新的版本。

                                  【讨论】:

                                  • 啊!我怎么没想到!感谢您发帖,这样我就可以面对手掌了。
                                  【解决方案20】:

                                  您可以完全删除 bcrypt 并安装 bcryptjs。它慢了约 30%,但没有依赖项,所以安装起来很轻松。

                                  npm i -S bcryptjs && npm uninstall -S bcrypt
                                  

                                  我们已经为我们的应用程序成功安装了它。我们遇到了 bcrypt 无法在 Node v8.x 的 AWS 实例上编译的问题

                                  【讨论】:

                                    【解决方案21】:

                                    我在使用 grpc 模块时遇到了同样的问题,在我的情况下,我使用的是 electron,并且在 env 变量“export npm_config_target=1.2.3”中设置了错误的电子版本,将其设置为我正在使用的电子版本已解决我的问题。希望这对设置环境变量的人有所帮助 (https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way)

                                    【讨论】:

                                      【解决方案22】:

                                      由于 package-lock.json,您很可能遇到此问题。不知何故,它似​​乎会阻止您重新编译或重建您的依赖项,即使您明确运行npm rebuild。我运行了以下所有内容来为我修复它:

                                      rm package-lock.json;
                                      rm -rf node_modules;
                                      npm install;
                                      

                                      【讨论】:

                                        【解决方案23】:

                                        在尝试了不同的事情之后。 这行得通。

                                        删除你的节点模块文件夹并运行

                                        npm i
                                        

                                        【讨论】:

                                          【解决方案24】:

                                          我遇到了同样的错误,但我尝试使用 Docker 容器运行节点应用程序。

                                          我通过添加一个 .dockerignore 文件来修复它以忽略 node_modules 目录,以确保在构建 docker 映像时,它会为我想要的映像(Alpine)构建本机包,而不是复制为我的主机编译的 node_modules (Debian)。

                                          【讨论】:

                                          • 为我工作...添加:node_modules/package-lock.json
                                          【解决方案25】:

                                          你必须重新构建包告诉 npm 也更新它的二进制文件。试试:

                                          npm rebuild bcrypt --update-binary
                                          

                                          @robertklep 使用此命令回答了一个相关问题,look

                                          仅重建并没有解决我的问题,这在我的应用程序中运行良好。

                                          希望对你有帮助!

                                          【讨论】:

                                          • 我认为重建的目的是更新二进制文件,你想什么时候重建而不更新二进制文件?
                                          • @bobmoff 我在想同样的方式尝试仅使用重建,文档说他们为我们更新了所有内容..但只有错误 - 我的问题是将我的旧工作本地存储库同步到新的本地NodeJS / NPM 版本。所以我环顾四周,“--update-binary”是告诉它真正强制和改变它的方式,它与自然重建有关。
                                          • --update-binary 帮我解决了,谢谢
                                          • 不客气,很高兴它对你有用 :)
                                          • 它对我有用。谢谢 :) @RPichioli
                                          【解决方案26】:

                                          使用 systemd 运行我的应用时出现此错误:

                                          ExecStart=/usr/local/bin/node /srv/myapp/server.js
                                          

                                          但我在 shell 中为 npm install 使用了不同的版本:

                                          $ which node
                                          /home/keith/.nvm/versions/node/v8.9.0/bin/node
                                          

                                          如果这是您的设置,您可以在服务文件中对节点版本进行硬编码,也可以按照this one 之类的解决方法进行操作。

                                          【讨论】:

                                            【解决方案27】:

                                            您需要从node_modules文件夹中删除模块文件夹(bcrypt)并重新安装,使用以下命令:

                                            $ rm -rf node_modules/bcrypt
                                            $ npm install
                                            // or
                                            $ yarn
                                            

                                            【讨论】:

                                            • 不起作用。对我来说,问题出在zmq 包上,重新构建或删除它和npm installing 并没有帮助。总是同样的问题。
                                            • @trusktr 尝试完全删除 node_modules 文件夹:rm -rf node_modules。清除 npm 缓存:npm cache clear,删除 package-lock.json 或 npm-shrinkwrap.json。只有在那之后运行npm i
                                            • 收到了一条好消息,“我当然希望你知道自己在做什么。”当我清除缓存时。我不是那么多,但显然你知道!它奏效了。
                                            • 你不需要/永远不需要npm cache clear,其他命令做到了
                                            • 为我工作!我的确切错误是-“模块'/Users//Downloads/intro-to-graphql/node_modules/bcrypt/lib/binding/bcrypt_lib .node'是使用NODE_MODULE_VERSION 64针对不同的Node.js版本编译的。”
                                            猜你喜欢
                                            • 2020-12-22
                                            • 2019-12-03
                                            • 2022-01-06
                                            • 2019-07-01
                                            • 2021-04-18
                                            • 2021-02-19
                                            • 1970-01-01
                                            • 2019-07-28
                                            相关资源
                                            最近更新 更多