Я использую find * up в пользовательском пакете npm, который я создал для загрузки данных конфигурации из корня проекта в пакет npm. Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке файлов используется модуль fs
, который запускается только во время компиляции. Когда я пытаюсь использовать пакет npm с проектом, он терпит неудачу, так как не может найти пакет fs
.
Проект представляет собой приложение Next.js.
Итак, в основном, в корневом каталоге project у меня есть файл конфигурации (назовем его myConfig.js
).
Я установил пакет npm с этим проектом (назовем его myPackage
).
Внутри node_modules/myPackage/index.js
есть код, который объединяет объект, экспортированный в myConfig.js
, с файлами конфигурации по умолчанию, расположенными в node_modules/myPackage/defaultConfig.js
.
Этот новый объединенный файл конфигурации затем используется другими компонентами в node_modules/myPackage/components/...
. Затем я импортирую компоненты в свое приложение. Например, у меня может быть import CoolComponent from "myPackage"
в пределах pages/index.js
.
Поскольку объединение конфигов выполняется во время выполнения и требует наличия модуля fs
, происходит сбой с ошибкой, говорящей о том, что модуль fs
не может быть найден. То, что я хочу сделать, это иметь возможность запускать это во время компиляции, но я не знаю, как это сделать.
Вот код:
// node_modules/myPackage/index.js
import findUp from "find-up";
import deepMerge from "deepmerge";
import defaultConfig from "./defaultConfig";
const config = (() => {
const path = findUp.sync("myConfig.js");
if (path && path.length) {
const userConfigModule = module.require(path);
return deepMerge(defaultConfig, userConfigModule);
}
return defaultConfig;
})();
export default config;
Точно так же я хотел бы иметь возможность извлекать данные из CMS также во время компиляции, поскольку выборка во время выполнения может значительно замедлить начальное время загрузки, а извлекаемые данные меняются не очень часто.
Как мне это сделать?