模块版本不匹配。预计11,得1

时间:2013-03-23 07:45:33

标签: node.js

Platform: Linux

运行我的node.js程序时出现以下错误

Error: Module version mismatch. Expected 11, got 1.

14 个答案:

答案 0 :(得分:54)

你可能会给出如下错误:

Error: Module version mismatch. Expected 11, got 1.
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/user/node_modules/xml2json/node_modules/node-expat/lib/node-expat.js:4:13)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

然后,您可以注意到模块或某处的错误。

这是因为您更新了节点,可能会重建上面找到的模块。

我通过重新安装(删除,然后安装)xml2json来回复我的问题。

祝你好运!

答案 1 :(得分:34)

npm rebuild也会做到这一点

https://www.npmjs.org/doc/cli/npm-rebuild.html

答案 2 :(得分:18)

Platform: Linux

为了将来在node.js v0.10.x(至少v0.10.0)中的引用,我收到了这个错误:

Error: Module version mismatch. Expected 11, got 1.

要解决此问题,我发现了这个interesting link并得到了Ben Noordhuis的帮助。以下命令帮助我摆脱了这个错误:

npm update

答案 3 :(得分:11)

当您使用一个版本的Node安装软件包,然后更改为其他版本时,通常会发生这种情况。更新节点或使用nvm切换到其他版本时会发生这种情况。

如果您尝试以root用户身份运行全局安装的节点,但您在自己的用户帐户中运行nvm管理的节点,也会发生这种情况。

要解决此问题,您只需使用正确版本的Node重新安装软件包即可。还要确保您在不同用户之间使用相同版本的Node。

答案 4 :(得分:4)

发生此问题是因为以下场景:您使用Node作为示例版本5.您在项目中添加了一些库,构建并运行它。您的所有库都将在节点版本5下编译。

然后将节点升级到版本6.然后运行一些使用节点的命令,例如npm run test。问题在于:您使用较新的节点版本来运行由旧节点编译的库。

通过以下两个命令解决这个问题很简单:

rm -rf node_modules // force remove node_modules directory
npm install         // install again all libraries. 

答案 5 :(得分:3)

如果你正在使用nvm,还有一件事要做 - 确保你在全局和应用程序中运行相同版本的节点。

:/$ node -v
v6.0.0

:/var/www/app$ node -v
v6.2.0

如果他们没有达成协议:

:/$ nvm use 6.2.0
Now using node v6.2.0 (npm v3.8.9)

(这对我有用。)

答案 6 :(得分:2)

您可以在此页面https://nodejs.org/en/download/releases/

上找到节点模块版本及其相应节点版本的列表
  

NODE_MODULE_VERSION是指Node.js的ABI(应用程序二进制接口)版本号,用于确定可以加载哪些版本的Node.js编译的C ++附加二进制文件而无需重新编译。它曾经在早期版本中存储为十六进制值,但现在表示为整数。

答案 7 :(得分:1)

有时问题是由于nodejs版本引起的。

尝试更新npm和nodejs版本。 请按照此link更新您的nodejs。

并更新你的npm使用:

sudo npm install npm -g

希望这有帮助!

答案 8 :(得分:0)

在我的情况下,错误的原因是C ++ - AddOn,它是针对不同的node.js版本编译的。

所以你可能不得不重新编译你的C ++ - AddOn,所以你运行的插件的主要版本和你运行的node.js匹配。

答案 9 :(得分:0)

我遇到了systemd这个问题,但我可以使用node myapp.js运行该应用。

事实证明ExecStart中的路径与which node中的路径不同。在服务文件中更改它为我修复了它。

source

答案 10 :(得分:0)

这些答案都不适合我,所以这是我的解决方案。 rm -rf node_modules/ 48和51对应于nodejs发布页面上的节点版本: https://nodejs.org/en/download/releases/

所以我安装了nvm,一个节点版本管理器,并将我的节点版本切换到48(6.11.x),然后运行 npm installDECLARE @DataSource TABLE ( [UserID] BIGINT ,[Max_Storage1] INT ,[Max_Storage2] INT ,[Max_Storage3] INT ,[UpdateTime] DATETIME2 ); INSERT INTO @DataSource ([UserID], [Max_Storage1], [Max_Storage2], [Max_Storage3], [UpdateTime]) VALUES (1, 50, NULL, NULL, DATEADD(DAY, 1, GETUTCDATE())) ,(1, 50, 500, NULL, DATEADD(DAY, 2, GETUTCDATE())) ,(1, 50, 500, 900, DATEADD(DAY, 3, GETUTCDATE())) ,(1, 100, 500, 900, DATEADD(DAY, 4, GETUTCDATE())) ,(1, 100, 400, 900, DATEADD(DAY, 5, GETUTCDATE())) ,(2, 50, NULL, NULL, DATEADD(DAY, 6, GETUTCDATE())) ,(2, 50, 500, NULL, DATEADD(DAY, 7, GETUTCDATE())); WITH DataSource AS ( SELECT ROW_NUMBER() OVER(PARTITION BY [UserID] ORDER BY [UpdateTime]) AS [RowID] ,* FROM @DataSource ), DataSourcePrecalc AS ( SELECT DS1.* ,ISNULL(DS1.[Max_Storage1] - DS2.[Max_Storage1], 0) + ISNULL(DS1.[Max_Storage2] - DS2.[Max_Storage2], 0) + ISNULL(DS1.[Max_Storage3] - DS2.[Max_Storage3], 0) AS [CurrDirection] ,LAG(ISNULL(DS1.[Max_Storage1] - DS2.[Max_Storage1], 0) + ISNULL(DS1.[Max_Storage2] - DS2.[Max_Storage2], 0) + ISNULL(DS1.[Max_Storage3] - DS2.[Max_Storage3], 0), 1, 0) OVER (PARTITION BY DS1.[UserID] ORDER BY DS1.[RowID]) AS [PrevDirection] FROM DataSource DS1 INNER JOIN DataSource DS2 ON DS1.[UserID] = DS2.[UserID] AND DS1.[RowID] = DS2.[RowID] + 1 ) SELECT * FROM DataSourcePrecalc WHERE [CurrDirection] < 0 AND [PrevDirection] > 0;

我的特定模块mcrypt依赖于c ++二进制文件,节点模块版本具有直接影响:

  

NODE_MODULE_VERSION是指Node.js的ABI(应用程序二进制接口)版本号,用于确定可以加载哪些版本的Node.js编译的C ++附加二进制文件而无需重新编译。它曾经在早期版本中存储为十六进制值,但现在表示为整数。

答案 11 :(得分:0)

在您更改节点版本后,最简单的方法是到达您需要的位置:

rm -Rf node_modules/ && yarn && yarn start

yarn start替换为启动服务器所需的任何命令。

答案 12 :(得分:0)

如果模块是c ++插件,则可能必须重建node-gyp

node-gyp rebuild

答案 13 :(得分:0)

以上答案均未解决我的问题。对我来说,解决方案是使用xml2js而不是xml2json