Реакция - Как запустить пакет node_modules во время компиляции / сборки, а не во время выполнения? - PullRequest
0 голосов
/ 08 июля 2019

Я использую 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 также во время компиляции, поскольку выборка во время выполнения может значительно замедлить начальное время загрузки, а извлекаемые данные меняются не очень часто.

Как мне это сделать?

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете использовать предоставленный пример для управления конфигурацией Next.js

В next.config.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;
})();

module.exports = {
    env: {
      ...config
   }
}

И тогда вы можете получить доступ к своим переменным через process.env.YOUR_VARIABLE

...