ERROR DE IMPORTACIÓN POR NODE_MODULES EN VS CODE
Aquí te escribiré la solución a un problema de importación de smart contracts por parte de OpenZeppelin…
Cuando comenzamos a construir nuestro proyecto, normalmente descargamos una “plantilla” de truffle que nos sirve como base, comúnmente nos aparece el contrato de migración a la blockchain, junto con un script. Bueno, al seguir avanzando descargamos con node los contratos de OpenZeppelin, donde nos dará todo un paquete que nos incluye un gran volumen de herramientas, esta se encontrará como:
Hay que tener en cuenta que necesitaremos adquirir la extensión de Solidity.
Ya al momento de haber creado el smart contract de nuestro proyecto, en la consola la compilamos:
Hasta aquí todo correcto, pero al igual que si ejecutamos el comando truffle build, nos manifestará el problema de que no encuentran los contratos a importar, aquí es muy sencillo de arreglar, (en lo personal me tarde 2 días para encontrar lo que estaba mal, fue muy angustiante). El problema radica en que el root path se necesita incluir a la configuración de la carpeta node_modules, he aquí, donde iremos a la configuración de la extensión de solidity en VS Code, y en la sección cuyo nombre es:
Solidity: Package Default Dependencies Directory
Nos aparecerá por default como:
node_modules
Aquí es donde la modificaremos por el nombre de el root path de nuestro proyecto y agregaremos la carpeta de node_modules.
Filename/node_modules
Pero… debe tener alguna explicación mas profunda, cierto?
Sí, vscode-solidity aún no es compatible con worspaces de multiples raíces. La razón es que la extensión de solidity espera a node_modules en el directorio raíz de su proyecto. Bien explica un colaborador en el foro de OpenZeppelin. Que podría usar:
${fileWorkspaceFolder}
en vez de
vscode.workspace.workspaceFolders[0].uri.fsPath
Como se muestra en esta línea de código de la extensión Solidity de VS Code:
Aquí te dejo el link del repositorio: https://github.com/juanfranblanco/vscode-solidity/blob/7280d587ca192e9755e9e41555a521fff88dbda7/src/compiler.ts#L165
Espero te sirva de ayuda en tu inicio como desarrollador en solidity.
Suerte con tu proyecto!