'import' e 'export'

di il
8 risposte

'import' e 'export'

Non riesco a usare le keyword "export" e "import".
Di seguito riporto i file "prova1.js" e "prova2.js", qualcuno puo' spiegarmi perche' il programma non funziona?
---------------------------------------------------------------------------------------------------------------
file 'prova1.js'



import {saluta} from "prova2.js";

saluta("Alfredo");
---------------------------------------------------------------------------------------------------------------
file 'prova2.js'



function saluta(nome)
{
console.log("Ciao "+nome);
}

export {saluta};

8 Risposte

  • Re: 'import' e 'export'

    Il codice sembra giusto.

    Presumendo che tu stia eseguendo Javasscript in un browser, mi viene da chiedere:

    - Quale browser? Non tutti supportano i moduli: https://caniuse.com/#search=module
    - Come carichi prova1 nel DOM? (ovvero, come hai scritto il tag<script...></script>)
    - E soprattutto, cosa dice la console DevTools? (si attiva con CTRL+SHIFT+I ->console)
  • Re: 'import' e 'export'

    Per eseguire il programma uso "Visual Studio Code", e ho installato "NodeJS".
    Non so se e' un'informazione utile, ma come browser ho installato "Chrome".
  • Re: 'import' e 'export'

    Se lo usi su Node.js:

    Purtroppo `import` lo puoi usare solo su un modulo e non sul file principale che viene eseguito da node.

    Quindi c'e' da capire quale file esegue node. Esegue file1.js?

    Cosa ti riporta in output Visual Studio?
  • Re: 'import' e 'export'

    Viene eseguito 'prova1.js'

    Questo e' il contenuto di 'launch.json':
    
    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "launch",
                "name": "Launch Program",
                "skipFiles": [
                    "<node_internals>/**"
                ],
                "program": "${workspaceFolder}\\prova1.js"
            }
        ]
    }
    
    e questo e' quanto visualizzato nella 'DEBUG CONSOLE':
    
    C:\Program Files\nodejs\node.exe --inspect-brk=25949 prova1.js 
    Debugger listening on ws://127.0.0.1:25949/dd0030ea-6884-4fe9-aca5-8246753e0316
    For help, see: https://nodejs.org/en/docs/inspector
    Debugger attached.
    Waiting forc:\Users\Amministratore\Documents\TEMPX\VSCode-JavaScript\prova1.js:1
    import {saluta} from "prova2.js";
    ^^^^^^
    
    SyntaxError: Cannot use import statement outside a module
    
  • Re: 'import' e 'export'

    Ora capisco. Allora, le parole chiave import/export seguite da parentesi grafe sono specifiche per i cosidetti moduli. Se sei interessato solo a far funzionare il codice, ti propongo questa soluzione che usa un approccio "standard":

    prova1.js: [CODE] var saluta = require("./prova2.js").saluta saluta("Alfredo"); prova2.js: [CODE] function saluta(nome) { console.log("Ciao "+nome); } exports.saluta = saluta; Nota bene come nella prima riga di prova1.js ho incluso "saluta" da prova2.js. E nota come nell'ultima riga di prova2.js ho esportato saluta. E' un modo di scrivere abbastanza scomodo vero?

    Per questo nodejs (e javascript in generale) hanno introdotto l'uso dei moduli che semplificano questo lavoro. Se sei interessato a capire come usare le keyword import/export nel contesto dei moduli dimmi pure.
  • Re: 'import' e 'export'

    Grazie spocchio, adesso il programma funziona.
    Per favore puoi spiegarmi come vanno usati "import" e "export" nei moduli?
    Grazie.
  • Re: 'import' e 'export'

    Certo. Pero' nota che nella versione 12 di node, i moduli sono ancora in fase sperimentale.

    Io da Linux ho fatto in questo modo:
    Innanzitutto Ho dovuto cambiare l' estensione dei due file da ".js" a ",mjs".

    prova1.mjs: [CODE]import {saluta} from "./prova2.mjs"; saluta("Alfredo"); prova2.mjs: [CODE] function saluta(nome) { console.log("Ciao "+nome); } export {saluta}; E ho dovuto eseguire node con il seguente flag: [CODE]node --experimental-modules prova1.mjs Il fatto che bisogni mettere quel flag, ti fa capire che il supporto dei moduli e' ancora agli esordi. Purtroppo non so come attivare questa cosa in Visual Studio
  • Re: 'import' e 'export'

    Grazie spocchio, adesso mi e' tutto chiaro.
Devi accedere o registrarti per scrivere nel forum
8 risposte