Расширение VScode Solidity - не удается найти импорт openzepplin
Я пытаюсь начать с того, что должно быть очень простым контрактом на Solidity, но VSCode доставляет мне трудности. Я использую плагин надежности Juan Blancos, но VSCode не может найти импорт openzepplin
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
Ошибка:
Источник «@openzeppelin / contract / token / ERC20 / ERC20.sol» не найден: обратный вызов для импорта файла не поддерживается
Несмотря на то, что vscode показывает красные волнистые линии, я могу успешно компилировать с помощью компиляции hardhat .
Если я изменю путь на
import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";
VScode перестает жаловаться, но тогда я не могу скомпилировать через hardhard, ошибка:
Источник "node_modules/@openzeppelin/contracts/security/Pausable.sol" не найден: файл за пределами разрешенных каталогов.
Мои настройки VSCode для расширения Solidity как для пользователя, так и для рабочего пространства:
"solidity.packageDefaultDependenciesContractsDirectory": "contracts",
"solidity.packageDefaultDependenciesDirectory": "node_modules"
Что соответствует структуре моего проекта
root
|_ contracts
|_ MyToken.sol
|_ node_modules
|_ @openzepplin
Я следовал приведенным здесь инструкциям и провел обширное исследование, но, к сожалению, не могу заставить его работать.
4 ответа
Я столкнулся с теми же проблемами. Перейдите в настройки VSCode (рабочая область) и введите packageDefaultDependities в строке поиска.
Затем нажмите кнопкуEdit in settings.json
внизу.
Добавьте эту строку вsettings.json
файл
"solidity.packageDefaultDependenciesDirectory": "node_modules",
Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported
У меня была такая же проблема. Я добавил несколько папок в
unnamed
Рабочее пространство. После удаления всех других папок и сохранения только одной папки проекта проблема для меня решена.
Проблемы с линтингом Если вы видите что-то вроде:
ParserError: Source "OpenZeppelin/openzeppelin-contracts@3.4.0/contracts/access/Ownable.sol" not found: File not found.
import "@openzeppelin/contracts/access/Ownable.sol";
В вашем vscode их можно смело игнорировать. Однако вы также можете добавить в свои настройки, чтобы игнорировать их.
- Создайте папку .vscode в корне вашего проекта.
- Создайте файл с именем settings.json Добавьте следующий код:
{
"solidity.remappings": [
"@chainlink/=/Users/patrick/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@0.2.2",
"@openzeppelin/=/Users/patrick/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.2"
]
}
Или любую другую версию, которая нужна вашим контрактам @chainlink и @openzeppelin. Например:
Используйте одинарные кавычки вместо двойных.
Вместо:
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
использовать это:
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';