🔎

あるモジュールで欲しいものが公開されているかどうかの(簡単な?)チェック方法

2022/05/22に公開

はじめに

例えばgetServerSidePropsがexportされているかどうかでそのモジュールファイルについての処理を分けたいとする。

/** ssr.ts */
export const getServerSideProps = () => {};

/** ssg.ts */
export const getStaticProps = () => {};

/**
 * getServerSidePropsのあるssr.tsとないssg.tsで処理を分けたい
 */

こういう時、どうやってチェックすれば良いか。

requireする

import assert from "assert";

const server = require("./ssr");
const client = require("./ssg");

assert(!!server.getServerSideProps);
assert(!client.getServerSideProps);

これでチェックできる。

参考にしたもの
https://github.com/vercel/next.js/blob/5544adc481f8821567e947a6e6d51d9d68ebd367/packages/next/server/next-server.ts#L1450-L1453

おわりに

Babel(等)を使ってASTを見てももちろんできます。

Discussion