ÐиÑекÑиви екÑпоÑÑÑ Ñа ÑмпоÑÑÑ Ð¼Ð°ÑÑÑ Ð´ÐµÐºÑлÑка ваÑÑанÑÑв ÑинÑакÑиÑÑ.
РпопеÑеднÑй ÑÑаÑÑÑ Ð¼Ð¸ вже баÑили ÑпоÑÑб пÑоÑÑого викоÑиÑÑаннÑ, ÑÐ¾Ð¼Ñ Ð´Ð°Ð²Ð°Ð¹Ñе ÑозглÑнемо Ñе декÑлÑка пÑикладÑв.
ÐкÑпоÑÑ Ð¿ÐµÑед оголоÑеннÑм
ÐÑдÑ-Ñке оголоÑÐµÐ½Ð½Ñ Ð·Ð¼ÑнноÑ, ÑÑнкÑÑÑ Ñи клаÑÑ Ð¼Ð¾Ð¶Ð½Ð° познаÑаÑи попеÑÐµÐ´Ñ Ð¾Ð¿ÐµÑаÑоÑом export.
ÐапÑиклад, вÑÑ Ð½Ð°ÑÑÑÐ¿Ð½Ñ ÐµÐºÑпоÑÑи валÑднÑ:
// екÑпоÑÑ Ð¼Ð°ÑивÑ
export let months = ['СÑÑ', 'ÐÑÑ', 'ÐеÑ','ÐвÑÑ', 'СеÑп', 'ÐеÑ', 'Ðов', 'ÐиÑÑ', 'ÐÑÑд'];
// екÑпоÑÑ ÐºÐ¾Ð½ÑÑанÑи
export const MODULES_BECAME_STANDARD_YEAR = 2015;
// екÑпоÑÑ ÐºÐ»Ð°ÑÑ
export class User {
constructor(name) {
this.name = name;
}
}
ÐвеÑнÑÑÑ ÑвагÑ, export пеÑед клаÑом Ñи ÑÑнкÑÑÑÑ Ð½Ðµ ÑобиÑÑ ÑÑ ÑÑнкÑÑоналÑним виÑазом. Це вÑе Ñе оголоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ (function declaration), Ñ
Ð¾Ñ Ñ ÐµÐºÐ¿Ð¾ÑÑовÑваноÑ.
ÐÑлÑÑÑÑÑÑ ÑÑилÑв JavaScript ÐºÐ¾Ð´Ñ Ð½Ðµ ÑекомендÑÑÑÑ ÑÑавиÑи кÑÐ°Ð¿ÐºÑ Ð· ÐºÐ¾Ð¼Ð¾Ñ Ð¿ÑÑÐ»Ñ Ð¾Ð³Ð¾Ð»Ð¾ÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ Ñа клаÑÑ.
Ð¢Ð¾Ð¼Ñ Ð½Ðµ поÑÑÑбно додаваÑи кÑÐ°Ð¿ÐºÑ Ð· ÐºÐ¾Ð¼Ð¾Ñ Ð² кÑнÑÑ export class Ñа export function:
export function sayHi(user) {
alert(`ÐÑивÑÑ, ${user}!`);
} // знак ; вÑдÑÑÑнÑй вкÑнÑÑ
ÐкÑпоÑÑ Ð¿Ð¾Ð·Ð° оголоÑеннÑм
Також export можна викоÑиÑÑовÑваÑи окÑемо.
РпÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¼Ð¸ ÑпоÑаÑÐºÑ Ð¾Ð³Ð¾Ð»Ð¾ÑÑÑмо ÑÑнкÑÑÑ, а поÑÑм екÑпоÑÑÑÑмо:
// ð say.js
function sayHi(user) {
alert(`ÐÑивÑÑ, ${user}!`);
}
function sayBye(user) {
alert(`ÐÑвай, ${user}!`);
}
export {sayHi, sayBye}; // ÑпиÑок екÑпоÑÑованиÑ
змÑнниÑ
â¦Ð§Ð¸, ÑеÑ
нÑÑно, ми можемо викоÑиÑÑаÑи export виÑе оголоÑÐµÐ½Ð½Ñ ÑÑнкÑÑÑ.
ÐмпоÑÑ *
ÐазвиÑай, ÑпиÑок Ñого, Ñо поÑÑÑбно ÑмпоÑÑÑваÑи ÑозÑаÑовÑÑÑÑ Ñ ÑÑгÑÑÐ½Ñ Ð´Ñжки import {...}, Ñк Ñ Ð¿ÑикладÑ:
// ð main.js
import {sayHi, sayBye} from './say.js';
sayHi('Ðван'); // ÐÑивÑÑ, Ðван!
sayBye('Ðван'); // ÐÑвай, Ðван!
ЯкÑо поÑÑÑбно ÑмпоÑÑÑваÑи дÑже багаÑо ÑÑÑноÑÑей, ми можемо ÑмпоÑÑÑваÑи вÑе, Ñк обâÑÐºÑ Ð· викоÑиÑÑаннÑм import * as <obj>, напÑиклад:
// ð main.js
import * as say from './say.js';
say.sayHi('Ðван');
say.sayBye('Ðван');
РпеÑÑого поглÑдÑ, âÑмпоÑÑÑваÑи вÑеâ виглÑÐ´Ð°Ñ ÑÑкавим Ñа зÑÑÑним Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑаннÑ, ÑÐ¾Ð´Ñ Ð½Ð°Ð²ÑÑо нам Ñвно випиÑÑваÑи ÑпиÑок Ñого, Ñо поÑÑÑбно ÑмпоÑÑÑваÑи?
Ðа Ñе Ñ Ð´ÐµÐºÑлÑка пÑиÑин.
- Явний ÑпиÑок Ñого, Ñо поÑÑÑбно ÑмпоÑÑÑваÑи Ð´Ð°Ñ ÐºÐ¾ÑоÑÑÑ Ñмена:
sayHi()замÑÑÑÑsay.sayHi(). - Явний ÑпиÑок Ñого, Ñо поÑÑÑбно ÑмпоÑÑÑваÑи Ð´Ð°Ñ ÐºÑаÑе ÑозÑмÑÐ½Ð½Ñ ÑÑÑÑкÑÑÑи кодÑ: Ñо викоÑиÑÑано Ñа в ÑÐºÐ¾Ð¼Ñ Ð¼ÑÑÑÑ. Також дозволÑÑ Ð¿ÑдÑÑимÑваÑи Ñа ÑеÑакÑоÑиÑи код легÑе.
СÑÑаÑÐ½Ñ ÑнÑÑÑÑменÑи збÑÑки, ÑÐ°ÐºÑ Ñк webpack Ñа ÑнÑÑ, обâÑднÑÑÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ñазом Ñ Ð¾Ð¿ÑимÑзÑÑÑÑ ÑÑ Ð´Ð»Ñ Ð¿ÑиÑкоÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ. Ðони Ñакож видалÑÑÑÑ ÑмпоÑÑи, Ñо не викоÑиÑÑовÑÑÑÑÑÑ.
ÐапÑиклад, ÑкÑо ви зÑобиÑе import * as library з велиÑÐµÐ·Ð½Ð¾Ñ Ð±ÑблÑоÑеки кодÑ, а поÑÑм викоÑиÑÑаÑÑе лиÑе кÑлÑка меÑодÑв, ÑÐ¾Ð´Ñ Ð½ÐµÐ²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ñ Ð¼ÐµÑоди не бÑдÑÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ñ Ð¾Ð¿ÑимÑзований бандл.
ÐмпоÑÑ âasâ
ÐÐ»Ñ ÑмпоÑÑÑ Ð¿Ñд ÑнÑим Ñменем можна викоÑиÑÑовÑваÑи as.
ÐапÑиклад, Ð´Ð»Ñ ÑпÑоÑÐµÐ½Ð½Ñ ÑмпоÑÑÑймо sayHi в локалÑÐ½Ñ Ð·Ð¼ÑÐ½Ð½Ñ hi Ñа sayBye Ñк bye:
// ð main.js
import {sayHi as hi, sayBye as bye} from './say.js';
hi('Ðван'); // ÐÑивÑÑ, Ðван!
bye('Ðван'); // ÐÑвай, Ðван!
ÐкÑпоÑÑ âasâ
ÐодÑбний ÑинÑакÑÐ¸Ñ ÑÑнÑÑ Ñ Ð´Ð»Ñ export.
ÐкÑпоÑÑÑймо ÑÑнкÑÑÑ Ñк hi Ñа bye:
// ð say.js
...
export {sayHi as hi, sayBye as bye};
Ð¢ÐµÐ¿ÐµÑ hi Ñа bye бÑдÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑиÑÑ Ð·Ð¾Ð²Ð½ÑÑнÑми модÑлÑми пÑи ÑмпоÑÑÑ:
// ð main.js
import * as say from './say.js';
say.hi('Ðван'); // ÐÑивÑÑ, Ðван!
say.bye('Ðван'); // ÐÑвай, Ðван!
Типовий екÑпоÑÑ
Ðа пÑакÑиÑÑ ÑÑнÑÑ Ð´Ð²Ð° оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð²Ð¸Ð´Ð¸ модÑлÑв.
- ÐодÑлÑ, Ñо мÑÑÑÑÑÑ Ð±ÑблÑоÑÐµÐºÑ (набÑÑ ÑÑнкÑÑй), Ñк
say.jsвиÑе. - ÐодÑлÑ, Ñо визнаÑаÑÑÑ ÑÐ´Ð¸Ð½Ñ ÑÑÑнÑÑÑÑ, ÑобÑо модÑлÑ
user.jsекÑпоÑÑÑÑ ÑÑлÑкиclass User.
Ðагалом дÑÑгий ÑпоÑÑб бÑлÑÑ Ð±Ð°Ð¶Ð°Ð½Ð¸Ð¹, бо Ñак ÑÑÑ âÑÑÑноÑÑÑâ Ð·Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑÑ Ñ Ð²Ð»Ð°ÑÐ½Ð¸Ñ Ð¼Ð¾Ð´ÑлÑÑ .
ÐÑевидно, Ñо Ñе Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ ÐºÑлÑкоÑÑÑ ÑайлÑв, Ñоб ÑÑе мало влаÑÐ½Ñ Ð¼Ð¾Ð´ÑлÑ, але Ñе зовÑÑм не пÑоблема. ÐаÑпÑавдÑ, навÑгаÑÑÑ Ð² ÐºÐ¾Ð´Ñ Ð¿Ð¾Ð»ÐµÐ³ÑÑÑÑÑÑÑ, ÑкÑо вÑÑ Ñайли маÑÑÑ Ð²Ð´Ð°Ð»Ñ Ð½Ð°Ð·Ð²Ñ Ñа ÑÑÑÑкÑÑÑÐ¾Ð²Ð°Ð½Ñ Ð² ÑÐµÐºÐ°Ñ .
ÐодÑÐ»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑ ÑпеÑÑалÑний ÑинÑакÑÐ¸Ñ export default (âÑиповий екÑпоÑÑâ) Ð´Ð»Ñ ÑÑвоÑÐµÐ½Ð½Ñ ÑÐ´Ð¸Ð½Ð¾Ñ ÑÑÑноÑÑÑ Ñа полегÑÐµÐ½Ð½Ñ Ð´Ð¾ÑÑÑпноÑÑÑ.
ЯкÑо ÑÑÑнÑÑÑÑ Ð¿Ð¾ÑÑÑбно екÑпоÑÑÑваÑи â попеÑÐµÐ´Ñ Ð¿Ð¾ÑÑÑбно поÑÑавиÑи export default:
// ð user.js
export default class User { // поÑÑÑбно додаÑи лиÑе "default"
constructor(name) {
this.name = name;
}
}
Ð ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñ ÑÐ°Ð¹Ð»Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи ÑÑлÑки одне викоÑиÑÑÐ°Ð½Ð½Ñ export default.
â¦Ð поÑÑм поÑÑÑбно виконаÑи ÑмпоÑÑ Ð±ÐµÐ· ÑÑгÑÑÐ½Ð¸Ñ Ð´Ñжок:
// ð main.js
import User from './user.js'; // не {User}, а пÑоÑÑо User
new User('John');
ÐмпоÑÑи без ÑÑгÑÑниÑ
дÑжок виглÑдаÑÑÑ ÐºÑаÑе. Ðоли поÑинаÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи модÑлÑ, поÑиÑÐµÐ½Ð¾Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ñ Ñ Ð½ÐµÐ²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ ÑÑгÑÑниÑ
дÑжок взагалÑ. ÐÑже, import поÑÑебÑÑ ÑÑгÑÑниÑ
дÑжок Ð´Ð»Ñ ÑменованиÑ
ÑмпоÑÑÑв Ñа не поÑÑебÑÑ, ÑкÑо Ñе Ñиповий ÑмпоÑÑ.
| Ðменований екÑпоÑÑ | Типовий екÑпоÑÑ |
|---|---|
export class User {...} |
export default class User {...} |
import {User} from ... |
import User from ... |
Ð¢ÐµÑ Ð½ÑÑно, ми можемо викоÑиÑÑовÑваÑи ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ Ñа ÑÐ¸Ð¿Ð¾Ð²Ñ ÐµÐºÑпоÑÑи в Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¼Ð¾Ð´ÑлÑ, але, на пÑакÑиÑÑ, ÑÑ Ð½Ðµ пÑийнÑÑо змÑÑÑваÑи. ÐодÑÐ»Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð¼Ð°Ñи або Ñменований екÑпоÑÑ, або Ñиповий.
ÐÑкÑлÑки, ÑÑлÑки одна ÑÑÑнÑÑÑÑ Ð¼Ð¾Ð¶Ðµ бÑÑи Ñипово екÑпоÑÑованоÑ, вона може не маÑи ÑменÑ.
РпÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¿ÑавилÑно викоÑиÑÑано ÑÐ¸Ð¿Ð¾Ð²Ñ ÐµÐºÑпоÑÑи:
export default class { // вÑдÑÑÑÐ½Ñ ÑмâÑ ÐºÐ»Ð°ÑÑ
constructor() { ... }
}
export default function(user) { // вÑдÑÑÑÐ½Ñ ÑмâÑ ÑÑнкÑÑÑ
alert(`ÐÑивÑÑ, ${user}!`);
}
// екÑпоÑÑовано ÑÐ´Ð¸Ð½Ñ Ð·Ð¼ÑÐ½Ð½Ñ Ð±ÐµÐ· оголоÑеннÑ
export default ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
ÐÑдÑÑÑнÑÑÑÑ ÑÐ¼ÐµÐ½Ñ Ñ Ð°Ð±ÑолÑÑно ноÑмалÑним, бо може бÑÑи ÑÑлÑки одне викоÑиÑÑÐ°Ð½Ð½Ñ export default Ñ ÑайлÑ. Таким Ñином import без ÑÑгÑÑниÑ
дÑжок знаÑ, Ñо ÑмпоÑÑÑваÑи.
Такий екÑпоÑÑ Ð±ÐµÐ· default згенеÑÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ:
export class { // Ðомилка! (неÑиповий екÑпоÑÑ Ð¿Ð¾ÑÑебÑÑ ÑменÑ)
constructor() {}
}
ÐмâÑ âdefaultâ
РдеÑкиÑ
ÑиÑÑаÑÑÑÑ
клÑÑове Ñлово default викоÑиÑÑовÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñипового ÑмпоÑÑÑ.
ÐапÑиклад, Ð´Ð»Ñ ÐµÐºÑпоÑÑÑ ÑÑнкÑÑÑ Ð¾ÐºÑемо вÑд ÑÑ Ð¾Ð³Ð¾Ð»Ð¾ÑеннÑ:
function sayHi(user) {
alert(`ÐÑивÑÑ, ${user}!`);
}
// Ñе ж Ñаме, Ñкби ми додали "export default" пеÑед оголоÑеннÑм ÑÑнкÑÑÑ
export {sayHi as default};
Чи, в ÑнÑÑй ÑиÑÑаÑÑÑ, ÑкажÑмо модÑÐ»Ñ user.js екÑпоÑÑÑÑ ÑÐ´Ð¸Ð½Ñ âголовнÑâ ÑÑÑнÑÑÑÑ Ñа Ñе декÑлÑка ÑменованиÑ
(ÑÑдко, але Ñаке ÑÑаплÑÑÑÑÑÑ):
// ð user.js
export default class User {
constructor(name) {
this.name = name;
}
}
export function sayHi(user) {
alert(`ÐÑивÑÑ, ${user}!`);
}
ÐÐ»Ñ ÑмпоÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ð¾Ñ ÑÑÑноÑÑÑ Ñа декÑлÑÐºÐ¾Ñ ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑÑÑбно:
// ð main.js
import {default as User, sayHi} from './user.js';
new User('Ðван');
РнаоÑÑанок, ÑкÑо ÑмпоÑÑÑваÑи вÑÑ ÑÑÑноÑÑÑ * Ñк обâÑкÑ, ÑÐ¾Ð´Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñипового ÑмпоÑÑÑ Ð±Ñде знаÑ
одиÑиÑÑ Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ default:
// ð main.js
import * as user from './user.js';
let User = user.default; // Ñиповий ÑмпоÑÑ
new User('Ðван');
ÐÑгÑменÑи пÑоÑи ÑÐ¸Ð¿Ð¾Ð²Ð¸Ñ ÑмпоÑÑÑв
ÐÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ ÑмпоÑÑи Ñ Ñвними. Ðам поÑÑÑбно ÑоÑно пеÑелÑÑиÑи вÑе, Ñо ÑмпоÑÑÑÑмо â Ñе Ñ Ð¿ÐµÑевагоÑ.
ÐÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ ÐµÐºÑпоÑÑи змÑÑÑÑÑÑ Ð½Ð°Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи ÑоÑне ÑмâÑ ÑÑÑноÑÑÑ Ð´Ð»Ñ ÑмпоÑÑÑ:
import {User} from './user.js';
// import {MyUser} не ÑпÑаÑÑÑ, оÑкÑлÑки ÑмâÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ бÑÑи {User}
â¦Ð Ñой ÑаÑ, Ñк Ð´Ð»Ñ Ñипового ÑмпоÑÑÑ Ð½Ð°Ð¼ завжди поÑÑÑбно обÑаÑи ÑмâÑ Ñамим:
import User from './user.js'; // ÑпÑаÑÑÑ
import MyUser from './user.js'; // ÑпÑаÑÑÑ Ñеж
// можна навÑÑÑ import Anything... Ñ Ñе вÑе одно ÑпÑаÑÑÑ
Таким Ñином ÑÑÐ·Ð½Ñ Ñлени команд можÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи ÑÑÐ·Ð½Ñ Ñмена Ð´Ð»Ñ ÑмпоÑÑÑ Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ð¸Ñ ÑÑÑноÑÑей Ñ Ñе не дÑже добÑе.
ÐазвиÑай, Ñоб ÑникаÑи ÑÑого Ñ ÑÑимаÑи код Ñзгодженим, ÑÑнÑÑ Ð¿Ñавило â ÑмпоÑÑована змÑнна повинна маÑи ÑмâÑ, Ñо вÑдповÑÐ´Ð°Ñ ÑÐ¼ÐµÐ½Ñ ÑайлÑ:
import User from './user.js';
import LoginForm from './loginForm.js';
import func from '/path/to/func.js';
...
РвÑÑм, деÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ вÑе Ñе вважаÑÑÑ Ñе ÑеÑйозним недолÑком ÑиповиÑ
екÑпоÑÑÑв. Ð¢Ð¾Ð¼Ñ Ð²Ð¾Ð½Ð¸ надаÑÑÑ Ð¿ÐµÑÐµÐ²Ð°Ð³Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ ÑменованиÑ
екÑпоÑÑÑв. ÐавÑÑÑ ÑкÑо екÑпоÑÑÑÑÑÑ Ð¾Ð´Ð½Ñ ÑÑÑнÑÑÑÑ, ÑÑ Ð²Ñе одно екÑпоÑÑÑÑÑÑ Ð· Ñменем, без default.
Це Ñакож дозволÑÑ Ð¿Ð¾Ð»ÐµÐ³ÑиÑи повÑоÑний екÑпоÑÑ (наÑÑÑпний ÑоздÑл).
РеекÑпоÑÑ
СинÑакÑÐ¸Ñ âÑеекÑпоÑÑÑâ export ... from ... дозволÑÑ Ð¾Ð´Ð½Ð¾ÑаÑно ÑмпоÑÑÑваÑи ÑÑÑноÑÑÑ Ñа екÑпоÑÑÑваÑи (можливо пÑд ÑнÑими Ñменем) Ñк ÑÑÑ:
export {sayHi} from './say.js'; // ÑеекÑпоÑÑ sayHi
export {default as User} from './user.js'; // ÑеекÑпоÑÑ default
ÐавÑÑо нам Ñе може знадобиÑиÑÑ? РозглÑнемо пÑакÑиÑний ÑпоÑÑб викоÑиÑÑаннÑ.
УÑвÑмо, Ñо нам поÑÑÑбно напиÑаÑи âпакеÑâ (package): диÑекÑоÑÑÑ Ð· багаÑÑма модÑлÑми, Ñо екÑпоÑÑÑÑ Ð¿ÐµÐ²Ð½Ð¸Ð¹ ÑÑнкÑÑонал (ÑнÑÑÑÑменÑи Ñк NPM дозволÑÑÑÑ Ð¿ÑблÑкÑваÑи Ñа ÑозповÑÑджÑваÑи ÑÐ°ÐºÑ Ð¿Ð°ÐºÐµÑи, але ми не зобовâÑÐ·Ð°Ð½Ñ ÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи). ÐагаÑо ÑÐ°ÐºÐ¸Ñ Ð¿Ð°ÐºÐµÑÑв викоÑиÑÑовÑÑÑÑÑÑ Ð² ÑÐ¾Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼ÑÐ¶Ð½Ð¸Ñ , Ð´Ð»Ñ Ð²Ð½ÑÑÑÑÑнÑого викоÑиÑÑÐ°Ð½Ð½Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÑнÑÐ¸Ñ Ð¼Ð¾Ð´ÑлÑв.
Файлова ÑÑÑÑкÑÑÑа може маÑи Ñакий виглÑд:
auth/
index.js
user.js
helpers.js
tests/
login.js
providers/
github.js
facebook.js
...
ÐÐ»Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð´Ð¾ ÑÑнкÑÑÐ¾Ð½Ð°Ð»Ñ Ð¿Ð°ÐºÐµÑа Ð·Ð·Ð¾Ð²Ð½Ñ Ð¼Ð¸ б Ñ Ð¾ÑÑли ÑÑвоÑиÑи ÑÐ´Ð¸Ð½Ñ ÑоÑÐºÑ Ð²Ñ Ð¾Ð´Ñ.
ÐнакÑе кажÑÑи, коÑиÑÑÑваÑÑ Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ ÑÑнкÑÑÐ¾Ð½Ð°Ð»Ñ Ð½Ð°Ñого пакеÑа Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑмпоÑÑÑваÑи ÑÑлÑки âголовний Ñайлâ auth/index.js.
ÐапÑиклад:
import {login, logout} from 'auth/index.js'
âÐоловний Ñайлâ auth/index.js екÑпоÑÑÑÑ Ð²ÐµÑÑ ÑÑнкÑÑонал, Ñо ми б Ñ
оÑÑли надаÑи з Ñим пакеÑом.
ÐÐ´ÐµÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñоб ÑнÑÑ Ð¿ÑогÑамÑÑÑи, ÑÐºÑ Ð±ÑдÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи Ð½Ð°Ñ Ð¿Ð°ÐºÐµÑ, не мали змоги вÑÑÑÑиÑиÑÑ Ñ Ð²Ð½ÑÑÑÑÑÐ½Ñ ÑÑÑÑкÑÑÑÑ. Ðи екÑпоÑÑÑÑмо ÑÑлÑки Ñе, Ñо необÑ
Ñдно з auth/index.js Ñа ÑÑимаÑмо ÑеÑÑÑ Ð¿ÑиÑ
ованим вÑд допиÑливиÑ
оÑей.
ÐÑкÑлÑки, ÑÑнкÑÑоналÑнÑÑÑÑ, до ÑÐºÐ¾Ñ Ð¼Ð¸ Ñ
оÑемо надаÑи доÑÑÑп, може знаÑ
одиÑиÑÑ Ð² ÑÑзниÑ
ÑаÑÑинаÑ
пакеÑа, ми можемо ÑмпоÑÑÑваÑи ÑÑ Ñа повÑоÑно екÑпоÑÑÑваÑи в auth/index.js:
// ð auth/index.js
// ÑмпоÑÑÑÑмо login/logout Ñа одÑÐ°Ð·Ñ ÐµÐºÑпоÑÑÑÑмо ÑÑ
import {login, logout} from './helpers.js';
export {login, logout};
// Ñипово ÑмпоÑÑÑÑмо User Ñа екÑпоÑÑÑÑмо його
import User from './user.js';
export {User};
...
Ð¢ÐµÐ¿ÐµÑ ÐºÐ¾ÑиÑÑÑваÑÑ Ð½Ð°Ñого пакеÑа зможÑÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñи import {login} from "auth/index.js".
СинÑакÑÐ¸Ñ export ... from ... â пÑоÑÑо ÑкоÑоÑений Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ ÑмпоÑÑÑ-екÑпоÑÑÑ:
// ð auth/index.js
// ÑеекÑпоÑÑ login/logout
export {login, logout} from './helpers.js';
// ÑеекÑпоÑÑ Ñипового екÑпоÑÑÑ Ð¿Ñд Ñменем User
export {default as User} from './user.js';
...
СÑÑÑÑÐ²Ð¾Ñ ÑÑзниÑÐµÑ Ð¼Ñж export ... from Ñа import/export Ñ Ð½ÐµÐ´Ð¾ÑÑÑпнÑÑÑÑ ÑеекÑпоÑÑованиÑ
модÑлÑв вÑеÑÐµÐ´Ð¸Ð½Ñ Ð¿Ð¾ÑоÑного ÑайлÑ. Ð¢Ð¾Ð¼Ñ Ð² пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ñе вÑеÑÐµÐ´Ð¸Ð½Ñ ÑÐ°Ð¹Ð»Ñ auth/index.js ми не зможемо викоÑиÑÑаÑи ÑеекÑпоÑÑÐ¾Ð²Ð°Ð½Ñ ÑÑнкÑÑÑ login/logout.
РеекÑпоÑÑ Ñипового екÑпоÑÑÑ
ÐÐ»Ñ ÑеекÑпоÑÑÑ Ñипового екÑпоÑÑÑ Ð¿Ð¾ÑÑÑбна окÑема обÑобка.
СкажÑмо, Ñ Ð½Ð°Ñ Ñ user.js з Ñкого ми Ñ
оÑемо ÑеекÑпоÑÑÑваÑи ÐºÐ»Ð°Ñ User:
// ð user.js
export default class User {
// ...
}
У Ð½Ð°Ñ Ð¼Ð¾Ð¶Ðµ виникнÑÑи Ð´Ð²Ñ Ð¿Ñоблеми:
-
export User from './user.js'не ÑпÑаÑÑÑ. Це пÑизведе до ÑинÑакÑиÑÐ½Ð¾Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸.ÐÐ»Ñ Ñипового ÑеекÑпоÑÑÑ Ð½Ð°Ð¼ поÑÑÑбно викоÑиÑÑаÑи
export {default as User}, Ñк в пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ñе. -
export * from './user.js'ÑеекÑпоÑÑÑÑ ÑÑлÑки ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ ÐµÐºÑпоÑÑи Ñ Ð¿ÑоÑгноÑÑÑ ÑиповÑ.ЯкÑо ми Ñ Ð¾Ñемо ÑеекÑпоÑÑÑваÑи Ñк ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ ÐµÐºÑпоÑÑи, Ñак Ñ ÑиповÑ, ÑÐ¾Ð´Ñ Ð½Ð°Ð¼ поÑÑÑÐ±Ð½Ñ Ð´Ð²Ñ ÑнÑÑÑÑкÑÑÑ:
export * from './user.js'; // Ð´Ð»Ñ ÑеекÑпоÑÑÑ ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐºÑпоÑÑÑв export {default} from './user.js'; // Ð´Ð»Ñ ÑеекÑпоÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ð¸Ñ ÐµÐºÑпоÑÑÑв
Ð¢Ð°ÐºÑ Ð´Ð¸Ð²Ð°ÑÑва Ð´Ð»Ñ ÑеекÑпоÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ð¸Ñ ÐµÐºÑпоÑÑÑв Ñ Ð¾Ð´Ð½ÑÑÑ Ð· пÑиÑин ÑÐ¾Ð¼Ñ Ð´ÐµÑÐºÑ ÑозÑобники недолÑблÑÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ ÐµÐºÑпоÑÑи Ñа надаÑÑÑ Ð¿ÐµÑÐµÐ²Ð°Ð³Ñ Ñменованим.
ÐÑдÑÑмки
ÐÑÑ Ð²ÑÑ Ñипи export, Ñо ми ÑозглÑнÑли в ÑÑй Ñа попеÑеднÑй ÑаÑÑинаÑ
.
Щоб пеÑевÑÑиÑи Ñебе, ви можеÑе пÑоÑиÑаÑи Ñа згадаÑи, Ñо вони ознаÑаÑÑÑ:
- ÐеÑед оголоÑеннÑм клаÑÑ/ÑÑнкÑÑÑ/â¦:
export [default] class/function/variable ...
- ÐкÑемий екÑпоÑÑ:
export {x [as y], ...}.
- РеекÑпоÑÑ:
export {x [as y], ...} from "module"export * from "module"(не ÑеекÑпоÑÑÑÑ ÑÐ¸Ð¿Ð¾Ð²Ñ ÐµÐºÑпоÑÑи).export {default [as y]} from "module"(Ñиповий ÑеекÑпоÑÑ).
ÐмпоÑÑ:
- ÐмпоÑÑ ÑменованиÑ
екÑпоÑÑÑв:
import {x [as y], ...} from "module"
- ÐмпоÑÑ ÑиповиÑ
екÑпоÑÑÑв:
import x from "module"import {default as x} from "module"
- ÐмпоÑÑÑÐ²Ð°Ð½Ð½Ñ Ð²ÑÑого:
import * as obj from "module"
- ТÑлÑки ÑмпоÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ (бÑде виконано його код) без пÑиÑвоÑÐ½Ð½Ñ Ð² змÑннÑ:
import "module"
ÐнÑÑÑÑкÑÑÑ import/export можÑÑÑ Ð±ÑÑи ÑозÑаÑÐ¾Ð²Ð°Ð½Ñ Ñк звеÑÑ
Ñ, Ñак Ñ Ð·Ð½Ð¸Ð·Ñ Ð² ÑкÑипÑÑ.
ТомÑ, ÑÐµÑ Ð½ÑÑно, Ñе пÑавилÑний код:
sayHi();
// ...
import {sayHi} from './say.js'; // ÑмпоÑÑ ÑозÑаÑовано в кÑнÑÑ ÑайлÑ
Ðа пÑакÑиÑÑ, ÑмпоÑÑи зазвиÑай ÑозÑаÑовÑÑÑÑ Ð½Ð° поÑаÑÐºÑ ÑайлÑ, але Ñе пеÑеважно Ð´Ð»Ñ Ð·ÑÑÑноÑÑÑ.
ÐвеÑнÑÑÑ ÑвагÑ, Ñо ÑнÑÑÑÑкÑÑÑ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ Ð½Ðµ ÑпÑаÑÑÑÑÑ, ÑкÑо ÑозÑаÑÐ¾Ð²Ð°Ð½Ñ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ {...}.
Умовний ÑмпоÑÑ, Ñк в наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ Ð¿ÑикладÑ, не ÑпÑаÑÑÑ:
if (something) {
import {sayHi} from "./say.js"; // Error: import must be at top level
}
â¦Ð©Ð¾ ÑобиÑи, ÑкÑо нам поÑÑÑбно ÑоÑÑ ÑмпоÑÑÑваÑи за Ð¿ÐµÐ²Ð½Ð¸Ñ Ñмов? Ðбо в певний ÑаÑ? ÐапÑиклад, заванÑажиÑи модÑÐ»Ñ Ð·Ð° запиÑом, коли вÑн дÑйÑно ÑÑане поÑÑÑбним.
ÐинамÑÑÐ½Ñ ÑмпоÑÑи бÑде ÑозглÑнÑÑо в наÑÑÑпнÑй ÑаÑÑинÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)