ESModules
export fooで外に出して
import {foo} from '../path/to/file'で読み込む
__filenameも無くす動きがある
Chrome 61から使えるようになったshokai.icon*5 code: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タグを併記しておけば、どっちかが読み込まれる
code:html
<script type="module" src="foo.js" crossorigin="use-credentials" /><!-- 新しいブラウザで動く -->
<script nomodule src="foo.js" /><!-- 古いブラウザはこっち -->