[翻訳]ブラウザのECMAScriptモジュール
6543 ワード
原文リンク:ECMAScript modules in browsers
作者:Jake Archibald
ブラウザは今ESモジュールが使えます.それらは: Safari 10.1 Chrome 61 Firefox 60 Microsoft Edge 16
スクリプト要素に
モジュールについては素晴らしい文章がありますが、私がテストや読解のルールを学んだ時に学習したブラウザ特有の内容を共有したいです.
まだサポートされていないいくつかのimportの使い方の完全な非相対URLは、 は は は 他の形式のエグゼクティブは、内蔵モジュールなどの将来の使用のために保留されています.
nomoduleを使って後方互換性があります.
ブラウザの Firefoxブラウザは Edgeブラウザは Safariブラウザは デフォルトでは が されます.
する は、
scriptは にHTML をブロックしてしまいます. に です. のスクリプトに しては、ブロックを するために
モジュールスクリプトは、
インラインスクリプトも されます.
は
のインラインスクリプトは
Asyncはインライン、 モジュールに しても に されます.
クイックダウンロードのスクリプトはスローダウンのスクリプトの に されます.
のスクリプトと に、
の
ブラウザの Firefoxブラウザは、インラインモジュールスクリプト の モジュールは のみ します.
ESモジュールを すれば、それらを も することができますが、それらは だけ されます.もちろん、これはHTMLのスクリプトモジュール- URLのモジュールスクリプトにも されます.ページごとに だけ されます.
ブラウザの Edgeは、マルチモジュールを する. されましたが、まだ されていません. にCORSを します
のスクリプトとは なり、モジュールスクリプト(およびその )は、CORSによって される.これは、ドメインをまたぐモジュールスクリプトが、
ブラウザの Firefox Demoページのロードに しました. Edgeは、CORS headerがないモジュールスクリプト(issue)をロードする.Edge 16で されました. を たない
が じソースから た 、ほとんどのCORSベースのAPIは、 (cookieなど)を しますが、
また、「モジュールは だけ する」というルールに する があります.モジュールはそのURLによってマークされているので、 に を たずにモジュールを した 、 このモジュールを すると、2 に られたものは として を たないモジュールである.これはなぜ が のURLに
: の はすぐに わるかもしれません.
ブラウザの Chromeは、 モジュール(issue)を する.Chrome 61で されました! Safariは、 Edgeは、 Edgeは、デフォルトで ソースモジュールを する に、 を しています. MIMEタイプ
のスクリプトとは なり、モジュールスクリプトはJavaScript MIMEタイプのうちの1つのタイプでなければ、モジュールは されません.HTML は
ブラウザの Edge MIMEタイプスクリプト(issue) これは が している です.もちろん、ESモジュールのブラウザ にとても しています.
、ダイナミック など!
Web Fundamentalsに する を て、モジュールの を く してください.
作者:Jake Archibald
ブラウザは今ESモジュールが使えます.それらは:
import {addTextToBody} from './utils.mjs';
addTextToBody('Modules are pretty cool.');
// utils.mjs
export function addTextToBody(text) {
const div = document.createElement('div');
div.textContent = text;
document.body.appendChild(div);
}
オンラインデモンストレーションスクリプト要素に
type=module
を追加するだけで、ブラウザはECMAScript moduleとしてインラインスクリプトや外部スクリプトを処理します.モジュールについては素晴らしい文章がありますが、私がテストや読解のルールを学んだ時に学習したブラウザ特有の内容を共有したいです.
まだサポートされていないいくつかのimportの使い方
// :
import {foo} from 'https://jakearchibald.com/utils/bar.mjs';
import {foo} from '/utils/bar.mjs';
import {foo} from './bar.mjs';
import {foo} from '../bar.mjs';
// :
import {foo} from 'bar.mjs';
import {foo} from 'utils/bar.mjs';
有効なモジュールパスの引数は、次の条件の一つに適合していなければなりません.new URL(moduleSpecifier)
に伝達されたときにエラーが発生しないようにする./
で始まる../
で始まる.../
で始まる.nomoduleを使って後方互換性があります.
オンラインデモンストレーションtype=module
をサポートするブラウザは、nomodule
の のスクリプトを します.これはサポートモジュールのブラウザにモジュールツリーを し、 のブラウザにレベルダウンバージョンを することができるという です.ブラウザの
nomodule
をサポートしていません.Firefox nightlyで されました.nomodule
をサポートしていません.Edge 16で されました.nomodule
をサポートしていません.Safari 11で しました!10.1に して、ここは に い があります.
オンラインデモンストレーションする は、
2.js
、1.mjs
、3.js
.scriptは にHTML をブロックしてしまいます. に です. のスクリプトに しては、ブロックを するために
defer
を することができます.もちろん、ドキュメントが されるまでは、スクリプトの を らせて、 の スクリプトと に を します.モジュールスクリプトのデフォルトの はdefer
のようです. の 、モジュールスクリプトをHTML にブロックすることはできません.モジュールスクリプトは、
defer
の のスクリプトと じ キューを して されます.インラインスクリプトも されます.
addTextToBody("Inline module executed");
addTextToBody("Inline script executed");
オンラインデモンストレーションは
1.js
、インラインスクリプト、インラインスクリプト、2.js
です.のインラインスクリプトは
defer
を しますが、インラインモジュールスクリプトは に されます.Asyncはインライン、 モジュールに しても に されます.
import {addTextToBody} from './utils.mjs';
addTextToBody('Inline module executed.');
オンラインデモンストレーションクイックダウンロードのスクリプトはスローダウンのスクリプトの に されます.
のスクリプトと に、
async
は、スクリプトをダウンロード にHTML をブロックしないようにし、 やかに する. のスクリプトとは なり、async
もインラインモジュールに される.の
async
と に、 はDOMに する に されない.ブラウザの
async
をサポートしていません.Firefox 59で されました.
import "./1.mjs";
オンラインデモンストレーションESモジュールを すれば、それらを も することができますが、それらは だけ されます.もちろん、これはHTMLのスクリプトモジュール- URLのモジュールスクリプトにも されます.ページごとに だけ されます.
ブラウザの
import 'https://….now.sh/no-cors';
addTextToBody("This will not execute.");
オンラインデモンストレーションのスクリプトとは なり、モジュールスクリプト(およびその )は、CORSによって される.これは、ドメインをまたぐモジュールスクリプトが、
Access-Control-Allow-Origin: *
などの なCORS ヘッダを さなければならないことを する.ブラウザの
オンラインデモンストレーションが じソースから た 、ほとんどのCORSベースのAPIは、 (cookieなど)を しますが、
fetch()
とモジュールスクリプトは です.それらを しない り、それらは されません.crossorigin
を することによって、 モジュールに を することができます. のソースにも を するつもりなら、crossorigin="use-credentials"
を してください. のソースは、Access-Control-Allow-Credentials:true
の ヘッダを して しなければならない.また、「モジュールは だけ する」というルールに する があります.モジュールはそのURLによってマークされているので、 に を たずにモジュールを した 、 このモジュールを すると、2 に られたものは として を たないモジュールである.これはなぜ が のURLに
?
を ったのかという で、それらを のものにしました.: の はすぐに わるかもしれません.
fetch()
およびモジュールスクリプトは、デフォルトでは、 じソースのURLに を します.イシューブラウザの
crossorigin
を しても、 ソースモジュール(issue)を する を しない.crossorigin
を したとしても、 ソースモジュール(issue)を する を しない.Edge 16で されました.のスクリプトとは なり、モジュールスクリプトはJavaScript MIMEタイプのうちの1つのタイプでなければ、モジュールは されません.HTML は
text/javascript
を することを しています.ブラウザの
、ダイナミック など!
Web Fundamentalsに する を て、モジュールの を く してください.