web-dev-qa-db-fra.com

ES6: "importer * en tant qu'alias" vs "importer un alias"

Y a-t-il une différence entre:

import utils from 'utils'

et

import * as utils from 'utils'?

Dans le cas A:

//utils.js
export function doSomething()
{
//...
}

Dans le cas B:

//utils.js
export function doSomething()
{
//...
}
export default function doSomethingDefault()
{
//...
}

[~ # ~] mise à jour [~ # ~] :

J'ai été induit en erreur par la fonction intellisense de vscode, mais comme recommandé, un petit test sur node + babel a montré la différence:

//index.js
import utilsCaseA from './utils1'
import * as utilsCaseAWildcard from './utils1'
var utilsCaseARequire = require('./utils1')

import utilsCaseB from './utils2'
import * as utilsCaseBWildcard from './utils2'
var utilsCaseBRequire = require('./utils2')

var compareObjects = 
{
    utilsCaseA, utilsCaseAWildcard, utilsCaseARequire,utilsCaseB,utilsCaseBWildcard,utilsCaseBRequire
};
console.log(compareObjects);

enter image description here

17
Philipp Munin

De votre exemple:

Cas A:

//utils.js
export function doSomething()
{
//...
}

Cas B:

//utils.js
export function doSomething()
{
//...
}
export default function doSomethingDefault()
{
//...
}

Résultat:

import utils from 'utils'
utils() // (Case A: undefined, Case B: doSomethingDefault)

import * as utils from 'utils'
utils // (Case A: utils = { doSomething: function }, Case B: utils = { doSomething: function, doSomethingDefault: function })

import { doSomething } from 'utils'
doSomething() // (both Case A and Case B: doSomething = doSomething)

La différence entre le cas A et le cas B est que, dans le cas A import utils from 'utils', utils sera undefined car il n'y a pas d'exportation par défaut. Dans le cas B, utils fera référence à doSomethingDefault.

Avec import * as utils from 'utils', dans le cas A utils aura une méthode (doSomething), tandis que dans le cas B utils aura deux méthodes (doSomething et doSomethingDefault).

12
inostia

import utils from 'utils' importe par défaut du paquet 'utils'. undefined dans le cas fourni.

import * as utils from 'utils' importe tout le module exports objet avec toutes les exportations nommées disponibles, y compris par défaut.

7
Yury Tarabanko