像 react-create-app 一样获取 json5 文件的 Rollup 静态路径

Get Rollup static path for json5 file like react-create-app does it

我使用 react-create-app 创建了应用程序。当我导入 .json5 文件时,它会将其作为静态文件,将其复制到 build/dist 文件夹和 returns 文件的相对路径,如我导入它的位置:

import foo from './some-file.json5'

console.log(foo); // logs: /static/media/some-file.hash.json5

然后我可以在为我的应用提供服务时轻松获取此文件。

我如何使用 rollup 及其插件来完成同样的事情?

我刚刚为此编写了自己的插件,享受:

import path from "path";
import fs from "fs";

export default function copyAndExportPath() {
  return {
    name: "copy-and-export-path",
    resolveId(source, importer) {
      if (source.endsWith(".json5")) {
        const absolutePath = path.resolve(path.dirname(importer), source);

        return absolutePath;
      }
    },

    load(id, importer) {
      if (id.endsWith(".json5")) {
        const [base, dest] = id.split("src");
        const absolutePathDest = path.join(base, "dist", dest);

        const destDir = path.dirname(absolutePathDest);

        if (!fs.existsSync(destDir)) {
          fs.mkdirSync(destDir, { recursive: true }, (error) => {
            if (error) {
              throw error;
            }
          });
        }

        if (fs.existsSync(destDir)) {
          fs.copyFileSync(id, absolutePathDest);
        }

        return `export default ".${dest}"`;
      }
      return null;
    },
  };
}