javascript - 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
,看起来web3
after的对象是 before的对象npm install
的一个很小的子集。web3
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)
?
解决方案
is a very small subset of the web3 object
后获得npm install
是因为,您安装的模块之一正在使用不同版本的web3
. 而当你没有做一个时npm install
,这个web3
包是从全局包中获取的web3@1.0.0-beta.30
。
这里要记住的关键是本地包覆盖全局包。
推荐阅读
- c++ - 它在VS中不起作用,但是当我运行它时它在CLion中起作用
- python - 是否可以在python中绘制一个正则表达式来提取所有字符串的属性值
- c - 自引用结构,包含三个指针(称为左、右和父)
- javascript - 如何在 ES6 中重写 Headless Autodesk Forge Viewer
- java - 如何使用 Java 在 Midi 文件中列出乐器名称?
- css - 嵌套类和标签
- php - 如何在 PHP 中匹配和替换图像 URL?
- amazon-web-services - 适用于对 AWS IoT 的 HTTP 请求的 AWS Signature v4
- node.js - 如何将 MongoDB 错误从 Express 传递给 React
- unity3d - 在 Unity 中将不透明着色器转换为透明着色器后没有透明度,需要帮助识别我的错误