Node.jsで動くJavaScriptとか書いているとimport.meta.url
とか書きますよね?
最近のNode.jsだとimport.meta.dirname
も使えたりするわけですけど、ちょっと古い環境では動かなかったりで困ったりしていて、そういえばどの環境だとどのimport.meta
が使えるかよくわからないな、と思ったのでざっと調べてまとめようと思いました。
調べたドキュメントは、この辺りです。
- Living Standard:
- Node:
- Deno:
- Bun:
- Webpack:
- Vite:
ちなみにMDNで書いてあるのは、import.meta.url
とimport.meta.resolve
だけです。
これは Living Standard のやつと一致しますね。
ご存知かと思いますが、ECMAScriptにはどのプロパティも書いてありません。
import.meta.url
そのスクリプトのURLが取れる。大体どこの環境でも使えると思う。
Living Standard にも書いてあるのでブラウザでも使えそう。
import.meta.resolve()
そのスクリプトからimport(specifier)
した場合に取れるスクリプトのパスの文字列が取れるはずだけど、環境によってはPromiseを返すらしい。怖い。
あと第2引数を受け入れるかどうかはその環境次第だと思う。
動きは違うけど、大体どこの環境でも存在はすると思う。
Living Standard にも書いてあるのでブラウザでも使えそう。
import.meta.filename
、import.meta.dirname
そのスクリプトのパスやディレクトリパスが取れる。
Node.js v20.11以降で使える。あとDenoとBunも大丈夫(バージョンは調べてない)。
import.meta.main
そのファイルがエントリーポイントかどうかがわかる。
DenoとBunで使える。
import.meta.path
、import.meta.dir
、import.meta.file
import.meta.path
はimport.meta.filename
、import.meta.dir
はimport.meta.dirname
と同じ。
import.meta.file
はそのファイル名が取れる。
Bunで使える。
import.meta.env
環境変数が取れる。
Bunで使える。あとViteではバンドル時に解決してくれる。
import.meta.glob()
Viteで使える。globを使って一括importできる。
ドキュメントはこちら→ https://vite.dev/guide/features.html#glob-import
import.meta.hot
Viteで使える。HMRのあれこれをするためのプロパティ。
ドキュメントはこちら→ https://vite.dev/guide/api-hmr.html
import.meta.webpack
Webpackで使える。Webpackのバージョンが取れる。
import.meta.webpackHot
Webpackで使える。HMRのやつ(かな?)
ドキュメントはこちら→ https://webpack.js.org/api/module-variables/#importmetawebpackhot
import.meta.webpackContext()
Webpackで使える。何かのコンテキストが取れる。
ドキュメントはこちら→ https://webpack.js.org/api/module-variables/#importmetawebpackcontext
あとがき
まだあるかもしれませんが、どうやって調べればいいかわからないのでこの辺で終わります。