在我的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
),web3
之后的npm install
对象似乎是{web3
的一小部分1}} npm 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)
对象的子集?
谢谢。
答案 0 :(得分:1)
is a very small subset of the web3 object
是在获得之后获得的npm install
是因为,您安装的某个模块正在使用不同版本的web3
。如果您没有执行npm install
,则web3
包将从web3@1.0.0-beta.30
的全局包中获取。
这里要记住的关键是本地包覆盖 全球一揽子计划。
答案 1 :(得分:0)
如果您的依赖项中未列出该软件包,并且您仍然可以使用它,则可能是因为它是全局安装的。
您可以通过npm ls -g
检查是否全局安装
与chai,ganache-cli不同,web3是一个应用程序依赖项,所以尝试在依赖项而不是dev依赖项上找到它