printPlugins ではプラグインの名前が表示されます
import Fastify from "fastify"
import sensible from "@fastify/sensible"
const fastify = Fastify()
await fastify.register(sensible)
console.log(fastify.printPlugins())
root -1 ms
├── bound _after 8 ms
├── @fastify/sensible 1 ms
└── bound _after 0 ms
ただ register のところで import を使うと問題が出ます
import Fastify from "fastify"
const fastify = Fastify()
await fastify.register(import("@fastify/sensible"))
console.log(fastify.printPlugins())
root -1 ms
├── bound _after 6 ms
├── [object Promise] 1 ms
└── bound _after 1 ms
import が返すのは Promise オブジェクトなので [object Promise] という表示になってました
register の引数のところで import を書くのは Fastify 側でサポートされていて ドキュメントでも見かける方法なのに対応できてないのは残念です
ただ import が終わって Promise が解決されないと中身の情報がわからないです
printPlugins が呼び出されるときに Promise が解決済みとも限らないですし仕方ないものなのかもしれません
名前をつけてみたら動くかなと試したら動きました
import Fastify from "fastify"
const importWithName = (specifier, name) =>
Object.assign(import(specifier), { name: name || specifier })
const fastify = Fastify()
await fastify.register(importWithName("@fastify/sensible", "sensible"))
console.log(fastify.printPlugins())
root -1 ms
├── bound _after 8 ms
├── sensible 1 ms
└── bound _after 0 ms
考えてみたら .name を参照してますが Promise だと .name はないはずです
どうやって作ってるのか気になったのでソースを見てみました
https://github.com/fastify/avvio/blob/v8.3.0/lib/get-plugin-name.js
いくつかパターンがあるみたいです
Promise のプロパティを追加しなくても単純にオプションとして name を渡すで良さそうです
import Fastify from "fastify"
const fastify = Fastify()
await fastify.register(import("@fastify/sensible"), { name: "sensible" })
console.log(fastify.printPlugins())
root -1 ms
├── bound _after 4 ms
├── sensible 1 ms
└── bound _after 0 ms
デバッグなど開発時向け機能の printPlugins のためだけに名前をつける必要があるのかはわかりませんけど 一時的にどれなのかわからないからつけるというときには良さそうです