Source "@openzeppelin/contracts...." not found: File import callback not supported
See original GitHub issueHi all,
I need some help trying to make this extension work with the @openzeppelin/contracts NPM package. I know issues like this have been raised in the past, but I tried a lot of things and I still keep getting the same error (or similar). Here’s what I do to initialize a simple Solidity project:
mkdir ack && cd ack truffle init truffle create all DeedRepository npm init -y npm install @openzeppelin/contracts
Then I open VS Code and edit my DeedRepository contract like this,
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.7;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract DeedRepository is ERC721 {
constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {}
}
Here’s a picture where you can see both the directory structure and the code side-by-side:
And the ERC721.sol contract is in there as well
The original error
Even before trying to compile this contract, I already have an error and a warning from the extension:
Btw, these are my default settings. I see no mention of Solidity in there at first,
So I go ahead anyway and try to compile the contract by right-clicking on the screen and selecting “Solidity: Compile Contract”. This is the compiler output:
1st solution
I read on the Project Structure and Remappings section of the README that I should add a couple of settings. I add them so that the settings file looks like this:
Second error
Then I try to compile the contract again the same way as before, by right-clicking on the screen and selecting “Solidity: Compile Contract”. I get a slightly different output this time, but still no luck:
Keep in mind that the full path underlined in red on the image above actually exists on my PC.
Compiling the code through solc
I thought this might be a configuration issue with the extension itself, so I tried to compile the contract by calling solc directly
Reading solc docs, I see that there are a couple of arguments that I can set to tell the compiler where to look for dependencies. So I call it again and pass those arguments. It works:
Conclusion
I’m guessing that the values for the following settings
“solidity.packageDefaultDependenciesContractsDirectory”: “”, “solidity.packageDefaultDependenciesDirectory”: “node_modules”
eventually make their way into compiler arguments, but I can’t seem to find the appropriate values. Could someone please help me find the correct values given my project structure?
PS, compiling through the extension works if given a relative path
I really would like to make it work with the following import syntax, though
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
Issue Analytics
- State:
- Created 2 years ago
- Comments:12 (4 by maintainers)
Top GitHub Comments
I manually add this in
.vscode/setting.json
and it works for mesource: https://stackoverflow.com/a/72168392
Not great, but the best solution I have found so far is to downgrade extension version to v0.0.135