--- 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")}}