Как повторно использовать «публичную» папку в monorepo с несколькими CRA? - PullRequest
1 голос
/ 11 ноября 2019

Я использую create-реакции-приложение в нескольких пакетах в монорепо. В папке «public» каждого приложения имеется достаточное количество дублированного кода и файлов, поскольку все они имеют одинаковые значки, описания, шрифты и т. Д.

Существует ли способ перемещения некоторых или всехфайлы в папке "public" в свой собственный пакет, запустите их с помощью инструмента, подобного handlebars.js , и, наконец, объедините их с помощью create-реагировать-приложение, не извлекая?

1 Ответ

0 голосов
/ 11 ноября 2019

Я не смог найти никакого инструмента с открытым исходным кодом для этого, поэтому я написал свои собственные сценарии:

prepare_cra_files.sh

#!/usr/bin/env bash

for app in apps/*/ ; do
  # Flush the files if they already exist
  if [ -d "$app"public ]; then
    rm -r "$app"public
  fi

  # Copy over the template files
  cp -r template "$app/public"
done

node templatify.js

templatify.js

const Handlebars = require("handlebars");
const fs = require("fs-extra");
const path = require("path");

const APPS_PATH = path.join(__dirname, "..", "apps");
const INDEX_HTML_TEMPLATE_PATH = path.join(__dirname, "template", "index.handlebars");

(async () => {
  const dirs = await fs.readdir(APPS_PATH);
  const indexHtmlTemplate = Handlebars.compile(await fs.readFile(INDEX_HTML_TEMPLATE_PATH, "utf-8"));

  dirs.forEach(async appName => {
    const indexHtmlContextPath = path.join(APPS_PATH, appName, "/handlebars/index.json");
    if (!fs.existsSync(indexHtmlContextPath)) {
      throw new Error(`Please provide the index.html context for the ${appName} appName`);
    }

    const indexHtmlContext = JSON.parse(await fs.readFile(indexHtmlContextPath, "utf-8"));
    const indexHtml = indexHtmlTemplate(indexHtmlContext);

    await fs.writeFile(path.join(APPS_PATH, appName, "public", "index.html"), indexHtml);
    await fs.remove(path.join(APPS_PATH, appName, "public", "index.handlebars"));
  });
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...