首页 > 解决方案 > NodeJS 包混淆

问题描述

在我的package.json文件中,我有:

  "devDependencies": {
    "chai": "^4.1.2",
    "chai-as-promised": "^7.0.0",
    "chai-bignumber": "^2.0.0",
    "decimal.js": "^10.0.0",
    "ethereumjs-testrpc-sc": "6.1.2",
    "ganache-cli": "6.1.0",
    "solidity-coverage": "0.4.14",
    "truffle": "4.1.3"
  }

我创建了一个 NodeJS 脚本文件getWeb3Version.js

let web3 = require("web3");
console.log(web3.version);

当我运行node getWeb3Version.js之前npm install,我得到了1.0.0-beta.30

当我node getWeb3Version.js追赶npm install时,我得到了undefined

为了更深入地调查,我改为console.log(web3.version)) console.log(web3,看起来web3after的对象是 before的对象npm install的一个​​很小的子集。web3npm install

为了更深入地调查,我npm list --depth=0从我的项目文件夹(文件所在的位置)内部和外部调用package.json

当我npm list --depth=0从我的项目文件夹中调用时,我得到了这个:

+-- chai@4.1.2
+-- chai-as-promised@7.1.1
+-- chai-bignumber@2.0.2
+-- decimal.js@10.0.0
+-- ethereumjs-testrpc-sc@6.1.2
+-- ganache-cli@6.1.0
+-- solidity-coverage@0.4.14
`-- truffle@4.1.3

如您所见,web3甚至不存在(这很明显,因为我没有将其导入package.json文件中)。

尽管如此,require("web3")如问题开头所述,似乎可行。

当我npm list --depth=0从我的项目文件夹之外调用时,我得到这个:

+-- chai@4.1.2
+-- decimal.js@9.0.1
+-- ethereumjs-testrpc-sc@6.0.7
+-- ganache-cli@6.1.0
+-- log4js@2.5.2
+-- pug@2.0.0-rc.4
+-- solc@0.4.19
+-- solidity-coverage@0.4.14
+-- solidity-parser-sc@0.4.4
+-- sprintf-js@1.1.1
+-- testrpc@0.0.1
+-- truffle@4.1.7
`-- web3@1.0.0-beta.30

后面是一堆以npm ERR! extraneous:.

这里到底发生了什么?

是否有可能在我的package.json文件中导入的包之一导出了web3我在执行时看到的对象的子集console.log(web3)

标签: javascriptnode.jsnpm

解决方案


is a very small subset of the web3 object后获得 npm install

是因为,您安装的模块之一正在使用不同版本的web3. 而当你没有做一个时npm install,这个web3包是从全局包中获取的web3@1.0.0-beta.30

这里要记住的关键是本地包覆盖全局包。


推荐阅读