Opcje eksportu modułu ES6+ javascript
Widziałem publiczny eksport modułów ES6 dokonywany na dwa z następujących sposobów:
// method 1
export var getAnswer = function () { return 'forty two'; };
// method 2
export default function () { return 'forty two'; };
-
Czy oba są ważne?
Jeśli tak, to dlaczego oba istnieją?
- Czy istnieją inne ważne opcje eksportu modułów przy użyciu składni ES6?
Jestem zaskoczony, że nie udało mi się znaleźć odpowiedzi z moim googlepu. Martwię się tylko O moduły ES6, Nie CommonJS, RequireJS, AMD, Node, itp.
3 answers
Rok i kilka później, Oto najlepsze informacje, jakie znalazłem na ten temat.
Istnieją 4 rodzaje eksportu. Oto przykłady użycia każdego z nich, wraz z niektórymi importami, które ich używają:
Składnia Eksportu
// default exports
export default 42;
export default {};
export default [];
export default (1 + 2);
export default foo;
export default function () {}
export default class {}
export default function foo () {}
export default class foo {}
// variables exports
export var foo = 1;
export var foo = function () {};
export var bar;
export let foo = 2;
export let bar;
export const foo = 3;
export function foo () {}
export class foo {}
// named exports
export {};
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};
// exports from
export * from "foo";
export {} from "foo";
export {foo} from "foo";
export {foo, bar} from "foo";
export {foo as bar} from "foo";
export {foo as default} from "foo";
export {foo as default, bar} from "foo";
export {default} from "foo";
export {default as foo} from "foo";
Import Składni
// default imports
import foo from "foo";
import {default as foo} from "foo";
// named imports
import {} from "foo";
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
// glob imports
import * as foo from "foo";
// mixing imports
import foo, {baz as xyz} from "foo";
import foo, * as bar from "foo";
// just import
import "foo";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-23 19:53:36
Oba są ważne.
Metoda 1 dostarcza nazwanego eksportu. Kluczem jest to, że możesz eksportować więcej niż jedną rzecz. Powinno to być używane zamiast eksportowania obiektu o wielu właściwościach. Gdy importujesz moduł o nazwie exports, użyj import {a, b} from c
.
Metoda 2 zapewnia domyślny eksport. Eksport może być tylko jeden. Jest on używany głównie podczas eksportowania pojedynczej rzeczy, takiej jak class
lub pojedynczej function
, której spodziewasz się używany bez dodatkowego wsparcia. Gdy importujesz moduł z domyślnym eksportem, użyj import d from c
.
Zauważ, że możesz używać obu! więc jeśli masz główną, podstawową funkcję z garstką okazjonalnie używanych pomocników, możesz export
pomocników i export default
podstawową. Gdy importujesz moduł i potrzebujesz obu rodzajów eksportu, użyj import d, {a, b} from c
.
Inną opcją jest to, że możesz uzyskać nazwy eksportów, wymieniając je na końcu twojego modułu, Tak: export {a,b,c}
. Możesz także zmienić ich nazwy export {a as $a, b as c}
.
Otrzymałem to wszystko z tego artykułu , który jest najlepszym źródłem aktualnych informacji o module es6, jakie udało mi się znaleźć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 14:47:30
Czy oba są ważne?
Nie, export function () { return answer; };
jest niepoprawne, albo używasz domyślnej, albo dodajesz nazwę do deklaracji funkcji.
Jeśli tak, to dlaczego oba istnieją?
Nie:)
- Czy istnieją inne ważne opcje eksportu modułów przy użyciu składni ES6?
Możesz zobaczyć wiele ważnych opcji tutaj: https://github.com/eslint/espree/pull/43
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-28 19:18:45