NodeJS 无法导入openzeppelin节点模块:不支持文件导入回调

k3bvogb1  于 2023-01-20  发布在  Node.js
关注(0)|答案(8)|浏览(235)

每当我试图编译solidity合约时,就会抛出错误ParserError: Source \"@OpenZeppelin/contracts/math/SafeMath.sol\" not found: File import callback not supported

pragma solidity ^0.7.0;

import "@OpenZeppelin/contracts/token/ERC20/ERC20.sol";
import "@OpenZeppelin/contracts/math/SafeMath.sol";

你知道是什么引起的吗?

bqjvbblv

bqjvbblv1#

确保已在项目根目录中打开VS Code。
在我的例子中,当我得到相同的错误时,我的VS代码目录看起来是这样的。

projects
 |___MyContract
   |__contracts
     |__Contract.sol

重新打开MyContract目录中的VS代码可修复此问题。

MyContract
 |__contracts
   |__Contract.sol
pkwftd7m

pkwftd7m2#

我现在遇到了同样的问题,我使用truffle+node,我修正了它,将导入路径修改为相对路径,例如,

pragma solidity ^0.7.0;

import "../node_modules/OpenZeppelin/contracts/token/ERC20/ERC20.sol";
import "../node_modules/OpenZeppelin/contracts/math/SafeMath.sol";

我不是100%确定为什么会发生这种情况,但我希望我帮助了你。

yqkkidmi

yqkkidmi3#

安装OpenZeppelin后,关闭IDE并重新打开它。

mm9b1k5b

mm9b1k5b4#

对于某些环境,SafeMath具有不同的路径

import "@openzeppelin/contracts/utils/math/SafeMath.sol";
s5a0g9ez

s5a0g9ez5#

确保你安装了openzeppelin

npm install --save @openzeppelin/contracts@v3.0.0
acruukt9

acruukt96#

实际上,问题是solidity编译器很愚蠢,不会自动遵循路径,你必须手动指定所有允许的路径(https://docs.soliditylang.org/en/latest/using-the-compiler.html),每一个都要完全指向文件(不能只给予更高级别的文件夹),如果可以的话,使用npx hardat编译会更好

3gtaxfhh

3gtaxfhh7#

什么对我有用(我使用Windows10和Visual Studio代码)-点击扩展图标-搜索solidity扩展-选择卸载按钮并点击下拉箭头-选择安装另一个版本-选择版本0. 0. 135-安装后,点击“需要重新加载”

l7mqbcuq

l7mqbcuq8#

对我很有效-
更改VSCode中Solidity扩展的设置。

  • 默认设置包括:“实体.包默认依赖关系合同目录”:“contracts”用户需要将设置从contracts更改为空字符串。“solidity.packageDefaultDependenciesContractsDirectory”:““*

源代码-https://github.com/juanfranblanco/vscode-solidity/issues/178

相关问题