ESModules
export foo
で外に出して
import {foo} from '../path/to/file'
で読み込む
__filename
も無くす動きがある
js<script type="module" crossorigin="use-credentials">
import {foo} from '../path/to/script.js'
</script>
type="module"
付ければいいだけ
認証が必要な場合は crossorigin="use-credentials"
を付ける
長いscriptもガンガン書ける
管理や配布が楽になった
type="module"
未対応ブラウザへの対応
ブラウザは、不明なtypeが指定されたscriptタグを解釈しない
<script type="module" src="foo.js" crossorigin="use-credentials" />
これだけだとChrome v60以前やFirefoxなどではscriptタグが動かない
ESModulesではなく普通のJavaScriptとしてロードしてはくれない
解決方法
nomodule
属性を付けたscriptタグを併記する
今度は逆にESmodules対応ブラウザがそのscriptタグを解釈しないようになってくれる
Scrapboxの
UserScriptみたいユーザーにJavaScriptを書かせて、中身を問わずとにかくロードしたい場合は
nomodule
付けたscriptタグを併記しておけば、どっちかが読み込まれる
html<script type="module" src="foo.js" crossorigin="use-credentials" /><!-- 新しいブラウザで動く -->
<script nomodule src="foo.js" /><!-- 古いブラウザはこっち -->