<script type="importmap"> HTML 屿§å¼
åºçº¿
广æ³å¯ç¨
èª 2023å¹´3æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
<script> å
ç´ ç type 屿§ç importmap å¼è¡¨ç¤ºè¯¥å
ç´ çå
容å
å«ä¸ä¸ªå¯¼å
¥æ å°ã
宿ä¾äºå¨ import è¯å¥æ import() è¿ç®ç¬¦ä¸ç¨ä½æ¨¡åæ è¯ç¬¦çææ¬ï¼ä¸è§£æè¯¥æ è¯ç¬¦æ¶å°æ¿æ¢è¯¥ææ¬ç对åºå¼ä¹é´çæ å°ã该 JSON 对象å¿
须符å导å
¥æ å° JSON è¡¨ç¤ºæ ¼å¼ã
导å
¥æ å°ç¨äºè§£æéæå卿坼å
¥ä¸çæ¨¡åæ è¯ç¬¦ï¼å æ¤å¿
é¡»å¨ä»»ä½ä½¿ç¨æ å°ä¸å£°æçæ è¯ç¬¦å¯¼å
¥æ¨¡åç <script> å
ç´ ä¹å声æåå¤çã
请注æï¼å¯¼å
¥æ å°ä»
éç¨äºå è½½å°ææ¡£ä¸ç模åä¸ç import è¯å¥æ import() è¿ç®ç¬¦ä¸çæ¨¡åæ è¯ç¬¦ï¼å®ä¸éç¨äº <script> å
ç´ ç src 屿§ä¸æå®çè·¯å¾ï¼ä¹ä¸éç¨äºå è½½å° worker æ worklet ä¸ç模åã
æ´å¤ä¿¡æ¯ï¼è¯·åé JavaScript 模åæåä¸ç使ç¨å¯¼å ¥æ å°å¯¼å ¥æ¨¡åé¨åã
è¯æ³
<script type="importmap">
// å®ä¹å¯¼å
¥ç JSON 对象
</script>
ä¸å¾æå® srcãasyncãnomoduleãdeferãcrossoriginãintegrity å referrerpolicy 屿§ã
å¼å¸¸
TypeError-
å¯¼å ¥æ å°å®ä¹ä¸æ¯ JSON 对象ï¼
importmapé®å·²å®ä¹ä½å ¶å¼ä¸æ¯ JSON å¯¹è±¡ï¼æèscopesé®å·²å®ä¹ä½å ¶å¼ä¸æ¯ JSON 对象ã
对äºå¯¼å ¥æ å° JSON ä¸ç¬¦åå¯¼å ¥æ å°æ¨¡å¼çå ¶ä»æ åµï¼æµè§å¨ä¼çææ§å¶å°è¦åã
æè¿°
å½å¯¼å
¥ JavaScript æ¨¡åæ¶ï¼import è¯å¥å import() è¿ç®ç¬¦é½æä¸ä¸ªæç¤ºè¦å¯¼å
¥æ¨¡åçâæ¨¡åæ è¯ç¬¦âãæµè§å¨å¿
é¡»è½å¤å°æ¤æ è¯ç¬¦è§£æä¸ºç»å¯¹ URL æè½å¯¼å
¥æ¨¡åã
ä¾å¦ï¼ä»¥ä¸è¯å¥ä»æ¨¡åæ è¯ç¬¦ "https://example.com/shapes/circle.js"ï¼è¿æ¯ä¸ä¸ªç»å¯¹ URLï¼åæ¨¡åæ è¯ç¬¦ "./modules/shapes/square.js"ï¼è¿æ¯ç¸å¯¹äºææ¡£åºç¡ URL çè·¯å¾ï¼å¯¼å
¥å
ç´ ã
import { name as circleName } from "https://example.com/shapes/circle.js";
import { name as squareName, draw } from "./modules/shapes/square.js";
å¯¼å ¥æ å°å 许å¼åè 卿¨¡åæ è¯ç¬¦ä¸æå®ï¼å ä¹ï¼ä»»ä½ææ¬ï¼æ å°æä¾äºå¨è§£ææ¨¡åæ è¯ç¬¦æ¶å°æ¿æ¢è¯¥ææ¬ç对åºå¼ã
裸模å
ä¸é¢ç导å
¥æ å°å®ä¹äºä¸ä¸ª imports é®ï¼å®å
å«ä¸ä¸ªå
·æ circle å square 屿§çâæ¨¡åæ è¯ç¬¦æ å°âã
<script type="importmap">
{
"imports": {
"circle": "https://example.com/shapes/circle.js",
"square": "./modules/shapes/square.js"
}
}
</script>
ä½¿ç¨æ¤å¯¼å ¥æ å°ï¼æä»¬å¯ä»¥å¯¼å ¥ä¸ä¸è¿°ç¸åçæ¨¡åï¼ä½å¨æ¨¡åæ è¯ç¬¦ä¸ä½¿ç¨â裸模åâï¼
import { name as circleName } from "circle";
import { name as squareName, draw } from "square";
æ å°è·¯å¾åç¼
æ¨¡åæ è¯ç¬¦æ å°é®ä¹å¯ä»¥ç¨äºéæ°æ å°æ¨¡åæ è¯ç¬¦ä¸çè·¯å¾åç¼ã请注æï¼å¨è¿ç§æ
åµä¸ï¼å±æ§åæ å°è·¯å¾é½å¿
须以尾鍿æ ï¼/ï¼ç»å°¾ã
<script type="importmap">
{
"imports": {
"shapes/": "./modules/shapes/",
"other-shapes/": "https://example.com/modules/shapes/"
}
}
</script>
ç¶åæä»¬å¯ä»¥å¦ä¸æç¤ºå¯¼å ¥ä¸ä¸ªå形模åã
import { name as circleName } from "shapes/circle.js";
æ¨¡åæ è¯ç¬¦æ å°é®ä¸çè·¯å¾
æ¨¡åæ è¯ç¬¦é®ä¸å¿
æ¯å个åè¯çåç§°ï¼â裸åç§°âï¼ãå®ä»¬è¿å¯ä»¥å
å«è·¯å¾åé符æä»¥è·¯å¾åé符ç»å°¾ï¼æè
å¯ä»¥æ¯ç»å¯¹ URLï¼æè
å¯ä»¥æ¯å¼å¤´ä¸º /ã./ æ ../ çç¸å¯¹ URL è·¯å¾ã
{
"imports": {
"modules/shapes/": "./modules/src/shapes/",
"modules/square": "./modules/src/other/shapes/square.js",
"https://example.com/modules/square.js": "./modules/src/other/shapes/square.js",
"../modules/shapes/": "/modules/shapes/"
}
}
å¦ææ¨¡åæ è¯ç¬¦æ å°ä¸æå¤ä¸ªå¯è½å¹é çæ¨¡åæ è¯ç¬¦é®ï¼åå°éæ©æå ·ä½çé®ï¼å³è·¯å¾/å¼è¾é¿çé£ä¸ªï¼ã
æ¨¡åæ è¯ç¬¦ ./foo/../js/app.js å°å¨å¹é
ä¹å被解æä¸º ./js/app.jsãè¿æå³çæ¨¡åæ è¯ç¬¦é® ./js/app.js ä¼å¹é
è¯¥æ¨¡åæ è¯ç¬¦ï¼å³ä½¿å®ä»¬å¹¶ä¸å®å
¨ç¸åã
ä½ç¨åæ¨¡åæ è¯ç¬¦æ å°
ä½ å¯ä»¥ä½¿ç¨ scopes 鮿¥æä¾ä»
å¨å¯¼å
¥æ¨¡åçèæ¬å
å«ç¹å® URL è·¯å¾æ¶æä½¿ç¨çæ å°ã妿å è½½èæ¬ç URL 䏿ä¾çè·¯å¾å¹é
ï¼åå°ä½¿ç¨ä¸è¯¥ä½ç¨åå
³èçæ å°ãè¿å
è®¸æ ¹æ®æ§è¡å¯¼å
¥ç代ç 使ç¨ä¸åçæ¬çæ¨¡åã
ä¾å¦ï¼ä» å½å 载模åç URL å å«è·¯å¾â/modules/custom-shapes/âæ¶ï¼ä¸é¢çæ å°æä¼ä½¿ç¨ä½ç¨åæ å°ã
<script type="importmap">
{
"imports": {
"square": "./modules/shapes/square.js"
},
"scopes": {
"/modules/custom-shapes/": {
"square": "https://example.com/modules/shapes/square.js"
}
}
}
</script>
妿å¤ä¸ªä½ç¨åå¹é
å¼ç¨ URLï¼åä½¿ç¨æå
·ä½çä½ç¨åè·¯å¾ï¼åç§°æé¿çä½ç¨åé®ï¼ãå¦ææ²¡æå¹é
çæ è¯ç¬¦ï¼æµè§å¨ä¼åéå°ä¸ä¸ä¸ªæå
·ä½çä½ç¨åè·¯å¾ï¼ä¾æ¤ç±»æ¨ï¼æç»åéå° imports é®ä¸çæ¨¡åæ è¯ç¬¦æ å°ã
宿´æ§å æ°æ®æ å°
ä½ å¯ä»¥ä½¿ç¨ integrity 鮿¥æä¾æ¨¡å宿´æ§å
æ°æ®çæ å°ãè¿ä½¿ä½ è½å¤ç¡®ä¿å¨ææéæå¯¼å
¥æ¨¡åç宿´æ§ãintegrity è¿ä½¿ä½ è½å¤ä¸ºé¡¶å±æé¢å 载模åæä¾åéï¼ä»¥é²å®ä»¬å°æªå
å« integrity 屿§ã
æ å°é®è¡¨ç¤ºæ¨¡å URLï¼å¯ä»¥æ¯ç»å¯¹ URL æç¸å¯¹ URLï¼ä»¥ /ã./ æ ../ å¼å¤´ï¼ãæ å°å¼è¡¨ç¤ºå®æ´æ§å
æ°æ®ï¼ä¸ integrity 屿§å¼ä¸ä½¿ç¨çå
æ°æ®ç¸åã
ä¾å¦ï¼ä¸é¢çæ å°ä¸º square.js 模åï¼ç´æ¥ï¼åå
¶è£¸æ è¯ç¬¦ï¼é´æ¥ï¼éè¿ imports é®ï¼å®ä¹äºå®æ´æ§å
æ°æ®ã
<script type="importmap">
{
"imports": {
"square": "./modules/shapes/square.js"
},
"integrity": {
"./modules/shapes/square.js": "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
}
}
</script>
åå¹¶å¤ä¸ªå¯¼å ¥æ å°
æ¯æçæµè§å¨å¯ä»¥å¨ææ¡£ä¸çä»»ä½ä½ç½®å£°æä¸ä¸ªæå¤ä¸ªå¯¼å ¥æ å°ï¼åææ¯å®ä»¬å¨ä»»ä½ä¾èµå®ä»¬ç模åå è½½ä¹åå®ä¹ï¼æäºæµè§å¨çæ¬åªå 许åä¸ªå¯¼å ¥æ å°å£°æï¼ä¸å¿ é¡»å¨ä»»ä½æ¨¡åå è½½ä¹ååºç°ï¼ã
å¨å é¨ï¼æµè§å¨ç»´æ¤ä¸ä¸ªåä¸çå ¨å±å¯¼å ¥æ å°è¡¨ç¤ºãå½ææ¡£ä¸å å«å¤ä¸ªå¯¼å ¥æ å°æ¶ï¼å®ä»¬çå 容卿³¨åæ¶ä¼è¢«åå¹¶å°å ¨å±å¯¼å ¥æ å°ä¸ã
ä¾å¦ï¼èè以ä¸ä¸¤ä¸ªå¯¼å ¥æ å°ï¼
<script type="importmap">
{
"imports": {
"/app/": "./original-app/"
}
}
</script>
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs"
},
"scopes": {
"/js": {
"/app/": "./js-app/"
}
}
}
</script>
å®ä»¬çåäºä»¥ä¸åä¸ªå¯¼å ¥æ å°ï¼
<script type="importmap">
{
"imports": {
"/app/": "./original-app/",
"/app/helper": "./helper/index.mjs"
},
"scopes": {
"/js": {
"/app/": "./js-app/"
}
}
}
</script>
æ¯ä¸ªå·²æ³¨åæ å°ä¸å·²ç»äºå è§£æè¿çæ¨¡åæ è¯ç¬¦ä¼è¢«ä¸¢å¼ãè¿äºæ è¯ç¬¦çåç»è§£æå°æä¾ä¸å ¶å åè§£æç¸åçç»æã
ä¾å¦ï¼å¦ææ¨¡åæ è¯ç¬¦ /app/helper.js å·²ç»è¢«è§£æï¼é£ä¹ä»¥ä¸æ°ç导å
¥æ å°ï¼
<script type="importmap">
{
"imports": {
"/app/helper.js": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
å°çåäºï¼
<script type="importmap">
{
"imports": {
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
/app/helper.js è§å被忽ç¥ï¼ä¸æªçº³å
¥æ å°ä¸ã
类似å°ï¼å·²æ³¨åæ å°ä¸é£äºå·²ç»å¨å ¨å±æ å°ä¸æ å°å° URL çæ¨¡åæ è¯ç¬¦ä¼è¢«ä¸¢å¼ï¼å®ä»¬å åçæ å°ä¼å ã
ä¾å¦ï¼ä»¥ä¸ä¸¤ä¸ªå¯¼å ¥æ å°ï¼
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
<script type="importmap">
{
"imports": {
"/app/helper": "./main/helper/index.mjs"
}
}
</script>
çåäºä»¥ä¸åä¸ªå¯¼å ¥æ å°ï¼
<script type="importmap">
{
"imports": {
"/app/helper": "./helper/index.mjs",
"lodash": "/node_modules/lodash-es/lodash.js"
}
}
</script>
第äºä¸ªæ å°ä¸ç /app/helper/ è§å被丢å¼ã
夿³¨ï¼å¨ä¸æ¯æçæµè§å¨ä¸ï¼æ¥çå ¼å®¹æ§æ°æ®ï¼ï¼å¯ä»¥ä½¿ç¨ polyfill æ¥é¿å 䏿¨¡åè§£æç¸å ³çé®é¢ã
å¯¼å ¥æ å° JSON 表示
以䏿¯å¯¼å ¥æ å° JSON 表示çâæ£å¼âå®ä¹ã
导å
¥æ å°å¿
é¡»æ¯ä¸ä¸ªææç JSON 对象ï¼å¯ä»¥å®ä¹ä»»æå¯éé® importsãscopes å integrityãæ¯ä¸ªé®çå¼å¿
é¡»æ¯ä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥ä¸ºç©ºã
importså¯é-
è¯¥å¼æ¯ä¸ä¸ªæ¨¡åæ è¯ç¬¦æ å°ï¼æä¾äºå¯è½åºç°å¨
importè¯å¥æimport()è¿ç®ç¬¦ä¸çæ¨¡åæ è¯ç¬¦ææ¬ä¸è§£ææ è¯ç¬¦æ¶å°æ¿æ¢å®çææ¬ä¹é´çæ å°ãè¿æ¯å¨æ²¡æå¹é ç
scopesè·¯å¾ URLï¼æå¹é çscopesè·¯å¾ä¸çæ¨¡åæ è¯ç¬¦æ å°ä¸å å«ä¸æ¨¡åæ è¯ç¬¦å¹é ç鮿¶ï¼ç¨äºæç´¢å¹é æ¨¡åæ è¯ç¬¦çåéæ å°ã<module specifier map>-
âæ¨¡åæ è¯ç¬¦æ å°âæ¯ä¸ä¸ªææç JSON 对象ï¼å ¶ä¸é®æ¯å¯¼å ¥æ¨¡åæ¶å¯è½åºç°å¨æ¨¡åæ è¯ç¬¦ä¸çææ¬ï¼å¯¹åºç弿¯å¨å°æ¨¡åæ è¯ç¬¦è§£æä¸ºå°åæ¶å°æ¿æ¢æ¤ææ¬ç URL æè·¯å¾ã
æ¨¡åæ è¯ç¬¦æ å° JSON 对象æä»¥ä¸è¦æ±ï¼
- ææé®é½ä¸è½ä¸ºç©ºã
- ææå¼å¿
é¡»æ¯å符串ï¼å®ä¹ææçç»å¯¹ URL æä»¥
/ã./æ../å¼å¤´çææ URL å符串ã - 妿é®ä»¥
/ç»å°¾ï¼å对åºçå¼ä¹å¿ 须以/ç»å°¾ã 尾鍿æ çé®å¯ç¨ä½æ å°ï¼æéæ°æ å°ï¼æ¨¡åå°åæ¶çåç¼ã - å¯¹è±¡å±æ§çé¡ºåºæ å ³ç´§è¦ï¼å¦æå¤ä¸ªé®å¯ä»¥å¹é æ¨¡åæ è¯ç¬¦ï¼åä½¿ç¨æå ·ä½çé®ï¼æ¢å¥è¯è¯´ï¼æ è¯ç¬¦âolive/branch/â伿¯âolive/âå å¹é ï¼ã
integrityå¯é-
å®ä¹ä¸ä¸ªææç JSON 对象ï¼å ¶ä¸é®æ¯å 嫿æç»å¯¹æç¸å¯¹ URLï¼ä»¥
/ã./æ../å¼å¤´ï¼çåç¬¦ä¸²ï¼ å¯¹åºç弿¯ææç宿´æ§å æ°æ®ãå¦æå¯¼å ¥æé¢å 载模åçèæ¬ç URL ä¸
integrity对象ä¸çæä¸ªé®å¹é ï¼åç¸åºç宿´æ§å æ°æ®å°åºç¨äºè¯¥èæ¬çè·åéé¡¹ï¼ é¤éå®ä»¬å·²ç»éå äºå®æ´æ§å æ°æ®ã scopeså¯é-
ä½ç¨åå®ä¹äºç¹å®äºè·¯å¾çæ¨¡åæ è¯ç¬¦æ å°ï¼å 许æ å°çéæ©åå³äºå¯¼å ¥æ¨¡åç代ç çè·¯å¾ã
scopes 对象æ¯ä¸ä¸ªææç JSON 对象ï¼å ¶ä¸æ¯ä¸ªå±æ§æ¯ä¸ä¸ª
<scope key>ï¼å³ URL è·¯å¾ï¼ï¼å¯¹åºç弿¯ä¸ä¸ª<module specifier map>ãå¦æå¯¼å ¥æ¨¡åçèæ¬ç URL ä¸
<scope key>è·¯å¾å¹é ï¼åé¦å æ£æ¥ä¸è¯¥é®å ³èç<module specifier map>å¼ä»¥æ¥æ¾å¹é çæ è¯ç¬¦ã 妿æå¤ä¸ªå¹é çä½ç¨åé®ï¼åé¦å æ£æ¥ä¸æå ·ä½/åµå¥ææ·±çä½ç¨åè·¯å¾å ³èçå¼ä»¥æ¥æ¾å¹é çæ¨¡åæ è¯ç¬¦ã 妿å¨ä»»ä½å¹é çä½ç¨åæ¨¡åæ è¯ç¬¦æ å°ä¸æ²¡æå¹é çæ¨¡åæ è¯ç¬¦é®ï¼å使ç¨importsä¸çå鿍¡åæ è¯ç¬¦æ å°ã请注æï¼ä½ç¨åä¸ä¼æ¹åå°åçè§£ææ¹å¼ï¼ç¸å¯¹å°åå§ç»ç¸å¯¹äºå¯¼å ¥æ å°åºç¡ URL è¿è¡è§£æã
è§è
| è§è |
|---|
| HTML > # import-map > |