Baseline Widely available *
ÐнÑÑÑÑкÑÐ¸Ñ import иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа ÑÑÑлок на знаÑениÑ, ÑкÑпоÑÑиÑованнÑе из внеÑнего модÑлÑ. ÐмпоÑÑиÑованнÑе модÑли наÑ
одÑÑÑÑ Ð² ÑÑÑогом Ñежиме
незавиÑимо Ð¾Ñ Ñого, обÑÑвлÑеÑе ли Ð²Ñ Ð¸Ñ
как ÑаковÑе или неÑ. ÐÐ»Ñ ÑабоÑÑ Ð¸Ð½ÑÑÑÑкÑии во вÑÑÑоеннÑÑ
ÑкÑипÑаÑ
нÑжно пÑопиÑаÑÑ Ñ ÑÑга script type="module"
.
СÑÑеÑÑвÑÐµÑ Ñакже function-like динамиÑеÑкий import()
, коÑоÑÑй не ÑÑебÑÐµÑ ÑкÑипÑов Ñ Ñипом "module
".
ÐбÑаÑÐ½Ð°Ñ ÑовмеÑÑимоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÐµÑпеÑена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°ÑÑибÑÑа nomodule
Ñега script.
ÐинамиÑеÑкий импоÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ в ÑиÑÑаÑиÑÑ , когда Ð²Ñ Ñ Ð¾ÑиÑе загÑÑзиÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ ÑÑловно или по ÑÑебованиÑ. СÑаÑиÑеÑÐºÐ°Ñ ÑоÑма пÑедпоÑÑиÑелÑна Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки наÑалÑнÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÐµÐµ полезна Ð´Ð»Ñ Ð¸Ð½ÑÑÑÑменÑов ÑÑаÑиÑеÑкого анализа и tree shaking.
ÐÑимеÑание: Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑа ÑÑнкÑионалÑноÑÑÑ ÑолÑко наÑÐ¸Ð½Ð°ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ð±ÑаÑзеÑами. ÐолноÑÐµÐ½Ð½Ð°Ñ ÑеализаÑÐ¸Ñ Ð¿ÑиÑÑÑÑÑвÑÐµÑ Ð²Ð¾ Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑанÑпайлеÑÐ°Ñ , ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº TypeScript и Babel, а Ñакже в ÑбоÑÑÐ¸ÐºÐ°Ñ , напÑимеÑ, в Rollup и Webpack.
СинÑакÑиÑimport defaultExport from "module-name"; import * as name from "module-name"; import { export } from "module-name"; import { export as alias } from "module-name"; import { export1 , export2 } from "module-name"; import { export1 , export2 as alias2 , [â¦] } from "module-name"; import defaultExport, { export [ , [â¦] ] } from "module-name"; import defaultExport, * as name from "module-name"; import "module-name"; import("/module-name.js").then(module => {â¦}) // ÐинамиÑеÑкий импоÑÑ
defaultExport
ÐÐ¼Ñ Ð¾Ð±ÑекÑа, коÑоÑÑй бÑÐ´ÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° знаÑение ÑкÑпоÑÑа по ÑмолÑÐ°Ð½Ð¸Ñ (деÑолÑнÑй ÑкÑпоÑÑ) из модÑлÑ.
module-name
ÐÐ¼Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа. ÐÑо заÑаÑÑÑÑ Ð¾ÑноÑиÑелÑнÑй или абÑолÑÑнÑй пÑÑÑ Ðº .js
ÑÐ°Ð¹Ð»Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð±ÐµÐ· ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ .js
. ÐекоÑоÑÑе ÑбоÑÑики могÑÑ ÑазÑеÑаÑÑ Ð¸Ð»Ð¸ даже ÑÑебоваÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑаÑÑиÑениÑ; пÑовеÑÑйÑе ÑÐ²Ð¾Ñ ÑабоÑее окÑÑжение. ÐопÑÑкаÑÑÑÑ ÑолÑко ÑÑÑоки Ñ Ð¾Ð´Ð¸Ð½Ð¾ÑнÑми или двойнÑми кавÑÑками.
name
ÐÐ¼Ñ Ð»Ð¾ÐºÐ°Ð»Ñного обÑекÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзован как Ñвоего Ñода пÑоÑÑÑанÑÑво имÑн, ÑÑÑлаÑÑееÑÑ Ð½Ð° импоÑÑиÑÑемÑе знаÑениÑ.
export, exportN
Ðмена знаÑений, коÑоÑÑе бÑдÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑованÑ.
alias, aliasN
Ðмена, коÑоÑÑе бÑдÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° импоÑÑиÑÑемÑе знаÑениÑ.
ÐаÑамеÑÑ name
ÑÑо Ð¸Ð¼Ñ Ð»Ð¾ÐºÐ°Ð»Ñного обÑекÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзован как Ñвоего Ñода пÑоÑÑÑанÑÑво имÑн, ÑÑÑлаÑÑееÑÑ Ð½Ð° импоÑÑиÑÑемÑе знаÑениÑ. ÐаÑамеÑÑÑ export
опÑеделÑÑÑ Ð¾ÑделÑнÑе именованнÑе знаÑениÑ, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº import * as name
импоÑÑиÑÑÐµÑ Ð²Ñе знаÑениÑ. ÐÑимеÑÑ Ð½Ð¸Ð¶Ðµ обÑÑÑнÑÑÑ ÑинÑакÑиÑ.
ÐÑÐ¾Ñ ÐºÐ¾Ð´ вÑÑавлÑÐµÑ Ð¾Ð±ÑÐµÐºÑ myModule
в ÑекÑÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи, ÑодеÑжаÑÑÑ Ð²Ñе ÑкÑпоÑÑиÑованнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð· модÑлÑ, наÑ
одÑÑегоÑÑ Ð² Ñайле /modules/my-module.js
.
import * as myModule from "/modules/my-module.js";
Рданном ÑлÑÑае, доÑÑÑп к импоÑÑиÑÑемÑм знаÑениÑм можно оÑÑÑеÑÑвиÑÑ Ñ Ð¸ÑполÑзованием имени модÑÐ»Ñ (в данном ÑлÑÑае "myModule") в каÑеÑÑве пÑоÑÑÑанÑÑва имÑн. ÐапÑимеÑ, еÑли импоÑÑиÑÑемÑй вÑÑе модÑÐ»Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑкÑпоÑÑ Ð¼ÐµÑода doAllTheAmazingThings()
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзваÑÑ ÐµÐ³Ð¾ Ñак:
myModule.doAllTheAmazingThings();
ÐмпоÑÑ ÐµÐ´Ð¸Ð½Ð¸Ñного знаÑÐµÐ½Ð¸Ñ Ð¸Ð· модÑлÑ
ÐпÑеделÑнное Ñанее знаÑение, названное myExport,
коÑоÑое бÑло ÑкÑпоÑÑиÑовано из модÑÐ»Ñ my-module
либо неÑвно (еÑли модÑÐ»Ñ Ð±Ñл ÑкÑпоÑÑиÑован Ñеликом), либо Ñвно (Ñ Ð¸ÑполÑзованием инÑÑÑÑкÑии export
), позволÑÐµÑ Ð²ÑÑавиÑÑ myExport
в ÑекÑÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи.
import { myExport } from "/modules/my-module.js";
ÐмпоÑÑ Ð½ÐµÑколÑкиÑ
единиÑнÑÑ
знаÑений
ÐÑÐ¾Ñ ÐºÐ¾Ð´ вÑÑавлÑÐµÑ Ð¾Ð±Ð° знаÑÐµÐ½Ð¸Ñ foo
и bar
в ÑекÑÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи.
import { foo, bar } from "/modules/my-module.js";
ÐмпоÑÑ Ð·Ð½Ð°Ñений Ñ Ð¸ÑполÑзованием более ÑдобнÑÑ
имÑн
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеименоваÑÑ Ð·Ð½Ð°ÑениÑ, когда импоÑÑиÑÑеÑе иÑ
. ÐапÑимеÑ, ÑÑÐ¾Ñ ÐºÐ¾Ð´ вÑÑавлÑÐµÑ shortName
в ÑекÑÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи.
import { reallyReallyLongModuleExportName as shortName } from "/modules/my-module.js";
ÐеÑеименование неÑколÑкиÑ
знаÑений в одном импоÑÑе
Ðод, коÑоÑÑй импоÑÑиÑÑÐµÑ Ð½ÐµÑколÑко знаÑений из модÑлÑ, иÑполÑзÑÑ Ð±Ð¾Ð»ÐµÐµ ÑдобнÑе имена.
import {
reallyReallyLongModuleExportName as shortName,
anotherLongModuleName as short,
} from "/modules/my-module.js";
ÐмпоÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ побоÑного ÑÑÑекÑа
ÐмпоÑÑ Ð²Ñего модÑÐ»Ñ ÑолÑко Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð±Ð¾Ñного ÑÑÑекÑа Ð¾Ñ ÐµÐ³Ð¾ вÑзова, не импоÑÑиÑÑÑ ÑÑо-либо. ÐÑо запÑÑÐºÐ°ÐµÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑй код модÑлÑ, но в дейÑÑвиÑелÑноÑÑи не импоÑÑиÑÑÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð·Ð½Ð°Ñений.
import "/modules/my-module.js";
ÐмпоÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ
ÐÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð´ÐµÑолÑнÑй export
(бÑÐ´Ñ Ñо обÑекÑ, ÑÑнкÑиÑ, клаÑÑ Ð¸Ð»Ð¸ дÑ.). ÐнÑÑÑÑкÑÐ¸Ñ import
заÑем Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзована Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа ÑакиÑ
знаÑений.
ÐÑоÑÑейÑÐ°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¿ÑÑмого импоÑÑа знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ:
import myDefault from "/modules/my-module.js";
Ðозможно Ñакже иÑполÑзование Ñакого ÑинÑакÑиÑа Ñ Ð´ÑÑгими ваÑианÑами из пеÑеÑиÑленнÑÑ Ð²ÑÑе (импоÑÑ Ð¿ÑоÑÑÑанÑÑва имÑн или именованнÑй импоÑÑ). Ð Ñаком ÑлÑÑае, импоÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¾Ð¿ÑеделÑн пеÑвÑм. ÐÐ»Ñ Ð¿ÑимеÑа:
import myDefault, * as myModule from "/modules/my-module.js";
// myModule иÑполÑзовано как пÑоÑÑÑанÑÑво имÑн
или
import myDefault, { foo, bar } from "/modules/my-module.js";
// именованнÑй импоÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑÑ
знаÑений
ÐмпоÑÑ Ð¿ÐµÑеменнÑÑ
ÐÑли Ð²Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑеÑе пеÑеменнÑе, Ñо в данной облаÑÑи видимоÑÑи они ведÑÑ ÑÐµÐ±Ñ ÐºÐ°Ðº конÑÑанÑÑ.
Такой код вÑÐ²ÐµÐ´ÐµÑ Ð¾ÑибкÑ:
my-module.js:
export let a = 2;
export let b = 3;
main.js:
import { a, b } from "/modules/my-module.js";
a = 5;
b = 6;
// Uncaught TypeError: Assignment to constant variable.
ÐÐ»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа можно воÑполÑзоваÑÑÑÑ Ð¾Ð±ÑекÑом в коÑоÑом Ñ ÑанÑÑÑÑ ÑÑи пеÑеменнÑе.
Такой код бÑÐ´ÐµÑ ÑабоÑим:
my-module.js:
export let obj = { a: 2, b: 4 };
main.js:
import { obj } from "/modules/my-module.js";
obj.a = 1;
obj.b = 4;
УÑиÑÑваÑ, ÑÑо import
Ñ
ÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑÑлки на знаÑениÑ, ÑкÑпоÑÑиÑованнÑе из внеÑнего модÑлÑ, Ñо ÑÑо можно иÑполÑзоваÑÑ ÐºÐ°Ðº замÑканиÑ.
ÐлÑÑевое Ñлово import
можно иÑполÑзоваÑÑ ÐºÐ°Ðº ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкого импоÑÑа модÑлей. ÐÑзов import()
возвÑаÑÐ°ÐµÑ Promise.
import("/modules/my-module.js").then((module) => {
// Ðелаем ÑÑо-нибÑÐ´Ñ Ñ Ð¼Ð¾Ð´Ñлем
});
Ðак ÑледÑÑвие возвÑаÑа Promise, Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑким импоÑÑом можно иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово await
let module = await import("/modules/my-module.js");
ÐбÑаÑиÑе внимание, ÑÑо неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо динамиÑеÑкий импоÑÑ Ð²ÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº вÑзов ÑÑнкÑии, он им по ÑÑÑи не ÑвлÑеÑÑÑ, Ñ.е. не наÑледÑÐµÑ Ð¾Ñ Function.prototype
и, как ÑледÑÑвие, его невозможно иÑполÑзоваÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð¼ÐµÑодами .call
, .apply
и .bind
ÐмпоÑÑ Ð¸Ð· вÑпомогаÑелÑного модÑÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð¼Ð¾Ñи в обÑабоÑке запÑоÑа AJAX JSON.
ÐодÑлÑ: file.jsfunction getJSON(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onload = function () {
callback(this.responseText);
};
xhr.open("GET", url, true);
xhr.send();
}
export function getUsefulContents(url, callback) {
getJSON(url, (data) => callback(JSON.parse(data)));
}
ÐÑновной код: main.js
import { getUsefulContents } from "/modules/file.js";
getUsefulContents("http://www.example.com", (data) => {
doSomethingUseful(data);
});
ÐинамиÑеÑкий импоÑÑ
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, как можно загÑÑзиÑÑ Ð½Ð° ÑÑÑаниÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй модÑÐ»Ñ Ð² завиÑимоÑÑи Ð¾Ñ Ð´ÐµÐ¹ÑÑвий полÑзоваÑÐµÐ»Ñ (в данном ÑлÑÑае, по ÐºÐ»Ð¸ÐºÑ Ð½Ð° кнопкÑ), а заÑем иÑполÑзоваÑÑ ÑÑнкÑии из загÑÑженного модÑлÑ. ÐÑомиÑÑ - ÑÑо не единÑÑвеннÑй ÑпоÑоб иÑполÑзоваÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкий импоÑÑ. ФÑнкÑÐ¸Ñ import()
Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑовмеÑÑно Ñ await
.
const main = document.querySelector("main");
for (const link of document.querySelectorAll("nav > a")) {
link.addEventListener("click", (e) => {
e.preventDefault();
import("/modules/my-module.js")
.then((module) => {
module.loadPageInto(main);
})
.catch((err) => {
main.textContent = err.message;
});
});
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4