Javascript NodeJS包混淆
在我的Javascript NodeJS包混淆,javascript,node.js,npm,Javascript,Node.js,Npm,在我的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-coverag
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);
当我在npm安装之前运行节点getWeb3Version.js
时,我得到1.0.0-beta.30
当我在npm安装之后运行节点getWeb3Version.js
时,我得到了未定义的
为了进行更深入的研究,我将console.log(web3.version)
更改为console.log(web3
),似乎npm安装之后的web3
对象是npm安装之前的web3
对象的一个非常小的子集
为了更深入地研究,我从项目文件夹(package.json
文件所在的文件夹)的内部和外部调用了npm list--depth=0
当我从我的项目文件夹中调用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
+-- 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
正如您所看到的,web3
甚至不存在(这很明显,因为我没有将其导入我的package.json
文件中)
尽管如此,require(“web3”)
似乎是可行的,如问题开头所述
当我从项目文件夹外部调用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
+-- 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!开头的行!无关:
这到底是怎么回事
在我的package.json
文件中导入的某个包是否可能导出我执行console.log(web3)
时看到的web3
对象的子集
是web3对象的一个非常小的子集
是在
npm安装
原因是,您安装的一个模块正在使用不同版本的web3
。当您没有进行npm安装时
,web3
软件包是从全局软件包中获得的,即web3@1.0.0-beta.30
这里要记住的关键是,本地包覆盖
全球一揽子计划
如果包未列在依赖项中,并且您仍然能够使用它,则可能是因为它是全局安装的。
您可以通过执行npm ls-g
与chai、ganache cli不同的是,web3是一个应用程序依赖项,因此请尝试在依赖项而不是开发依赖项中查找它我会在我的包中将其列为依赖项。json
为避免任何混淆,通常会为cli等安装全局模块,在其他情况下,最好在package.json
npm列表中指定模块,npm列表不会给出完整的列表。您可以查看node\u modules
文件夹,我打赌您将拥有本地版本的web3
@SunilBN:谢谢。我在我的项目文件夹中有node\u模块
(但我在问题中解释过,web3
不在那里)。我还有一个在C:\Users\my\u username
,还有一个在C:\Users\my\u username\AppData\Roaming\npm
。正如你可能猜到的,我正在Windows上运行。我到底该拿这些做什么?谢谢。但是,我已按照中的说明从系统中删除了所有全局安装的软件包。我承认,我确实看到了另一个全局包可能位于的地方,在C:\Users\my\u username\node\u modules
,所以这个答案可能不完整…试试npm ls web3
,你会更清楚。当我在我的项目文件夹外这样做时,我得到web3@0.18.4不相关的
在
坚固性下-coverage@0.4.14
和web3@1.0.0-beta.30在顶级。当我在项目文件夹中执行此操作时,我得到web3@0.18.4
下的坚固性-coverage@0.4.14
。此命令列出了外部和内部可用的模块,因为您删除了全局模块,您将只得到一个,即由npm安装安装的模块。如果在删除节点_模块后立即尝试使用该模块,它将立即抛出man错误