--- title: export slug: Web/JavaScript/Reference/Statements/export translation_of: Web/JavaScript/Reference/Statements/export ---
Вираз export
використовується для створення модулів у Javascript для експортування функцій, об'єктів, або примітивних значень з модуля щоб їх можна було використовувати в інших програмах за допомогою виразу {{jsxref("Statements/import", "import")}}.
Експортовані модулі знаходяться в {{jsxref("Strict_mode","strict mode")}} незалежно від того чи ви оголошуєте їх як такі чи ні. Вираз експорт не може бути використаним в вбудованих скріптах (embedded scripts).
Існує три види експортів
// Експортування індивідуальних властивостей export let name1, name2, …, nameN; // також var, const export let name1 = …, name2 = …, …, nameN; // також var, const export function functionName(){...} export class ClassName {...} // Список експортів export { name1, name2, …, nameN }; // Перейменування експортів export { variable1 as name1, variable2 as name2, …, nameN }; // Експортування деструктивних значень з перейменуванням export const { name1, name2: bar } = o; // Дефолтні експорти export default expression; export default function (…) { … } // також class, function* export default function name1(…) { … } // також class, function* export { name1 as default, … }; // Агрегаціямодулів export * from …; // не встановлює дефолтний експорт export { name1, name2, …, nameN } from …; export { import1 as name1, import2 as name2, …, nameN } from …; export { default } from …;
nameN
Існує два типи експортів, іменовані і дефолтні. Ви можете мати багато іменованих в модулі, але тільки один дефолтний експорт. Кожен тип має відповідність у синтаксі наведеному вище:
Іменовані експорти:
// експорт функціоналу оголошеного раніше export { myFunction, myVariable }; // експортуємо індивідуальний функціонал (можу бути var, let, // const, function, class) export let myVariable = Math.sqrt(2); export function myFunction() { ... };
Дефолтні експорти:
// експорт функціоналу оголошеного раніше як дефолтний export { myFunction as default }; // експорт індивідуального функціоналу як дефолтний export default myFunction() { ... } export default class { .. }
Іменоввані експорти є корисними при експортуванні декількох значень. Під час імпорту іменованих експортів обов'язково потрібно використовувати те саме ім'я відповідного об'єкта.
Але дефолтний експорт може бути імпортований з будь яким ім'ям, наприклад:
// файл test.js let k; export default k = 12;
// якийсь інший файл import m from './test'; // Візьміть до уваги що ми можемо використовувати import m замість import k, тому що k є дефолтним експортом console.log(m); // виведе 12
Ви також можете переіменовувати іменні експорти щоб уникнути конфліктів:
export { myFunction as function1, myVariable as variable };
І складати підмодулі докупи в батьківському модулі щоб можна було їх імпортувати з цього модуля.
// В parentModule.js export { myFunction, myVariable } from 'childModule1.js'; export { myClass } from 'childModule2.js';
// В модулі вищого рівня import { myFunction, myVariable, myClass } from 'parentModule.js'
В модулі my-module.js
, ми можемо написати такий код:
// модуль "my-module.js" function cube(x) { return x * x * x; } const foo = Math.PI + Math.SQRT2; var graph = { options: { color:'white', thickness:'2px' }, draw: function() { console.log('From graph draw function'); } } export { cube, foo, graph };
Потім у модулі вищого порядку всередині вашої HTML сторінки ми можемо написати:
import { cube, foo, graph } from './my-module.js'; graph.options = { color:'blue', thickness:'3px' }; graph.draw(); console.log(cube(3)); // 27 console.log(foo); // 4.555806215962888
Важливо звернути увагу на наступне:
file://
URL — ви отримаєте CORS помилки. Ви маєте виконувати модулі церез http сервер.Якщо ви хочете експортувати одне значення з вашого модулю ви можете використати дефолтний екпорт:
// модуль "my-module.js" export default function cube(x) { return x * x * x; }
Потім, у дефолтному скрипті імпортувати напряму це значення:
import cube from './my-module.js'; console.log(cube(3)); // 27
Specification | Status | Comment |
---|---|---|
{{SpecName('ESDraft', '#sec-exports', 'Exports')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES2015', '#sec-exports', 'Exports')}} | {{Spec2('ES2015')}} | Initial definition. |
{{Compat("javascript.statements.export")}}