Совместное использование файла конфигурации между Python и проектом React, созданным с помощью create-реагировать-приложение

Мне нужно поделиться файлом конфигурации между Python и кодом React - я мог бы использовать JSON, который легко импортировать в каждый, но я бы предпочел иметь возможность добавлять комментарии, включать и выключать детали и т. Д.

Каков хороший способ сделать что-то подобное?

1 ответ

Решение

Я пробовал HJSON (понятный человеку JSON), но встраивание текстового файла, такого как HJSON, в сборку React не работает AFAIK без удаления create-реакции-приложения и изменения конфигурации webpack для использования raw-loader или использования response-app-rewired, чтобы сделать что-то подобное.

Я завелся с помощью response-app-rewired -

Сначала добавьте эти библиотеки в проект React -

yarn add react-app-rewired
yarn add hjson
yarn add hjson-loader

Затем добавьте config-overrides.js файл на верхний уровень проекта React - это изменит конфигурацию веб-пакета на лету -

const { getLoader } = require('react-app-rewired');

function rewireAddHjson(config, env, options = {}) {
  const hjsonExtension = /\.hjson$/;
  const excludeRule = getLoader(config.module.rules, rule => rule.exclude);
  excludeRule.exclude.push(hjsonExtension);
  const hjsonRule = {
    test: hjsonExtension,
    loader: 'hjson-loader',
  };
  config.module.rules.push(hjsonRule);
  return config;
}

module.exports = function override(config, env) {
  config = rewireAddHjson(config, env);
  return config;
};

И в package.json замените "ответные скрипты" на "реагирующие приложения":

"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test --env=jsdom",
+   "start": "react-app-rewired start",
+   "build": "react-app-rewired build",
+   "test": "react-app-rewired test --env=jsdom"
}

Тогда в Python вы можете сказать

import hjson
with open('app/client/src/assets/options.hjson') as f:
    options = hjson.load(f)

и в Реакте могу сказать

import options from '../assets/options.hjson'; // a json object
Другие вопросы по тегам