Я пытаюсь выполнить некоторые требования во время выполнения через require.context
в моем проекте CRA (с Typescript), но я получаю только такие ошибки:
TypeError: __webpack_require __ ( ...). context не является функцией
и
Критическая зависимость: функция require используется таким образом, что зависимости не могут быть извлечены статически
Я где-то читал, что теперь это нужно заполнить через Вавилон или cra-rewired
. Что ж, я уже использую Craco для включения поддержки Less, но я не знаю, как добавить require.context
в мои конфигурации Craco.
Кто-нибудь знает, как это сделать?
Обновление: Вот как я звоню require.context:
const packagesDirectory = path.join(__dirname, '../../../../packages');
const textDataContext = require.context(packagesDirectory, true, /(\w+)\.(\w+)\.(mdx?)/);
Обновление 2:
Как некоторые комментарии в этот поток предлагает, я пытался добавить babel-plugin-require-context-hook
к своему приложению так:
// craco.config.js
const CracoLessPlugin = require('craco-less');
module.exports = {
plugins: [
{plugin: CracoLessPlugin}
],
babel: {
plugins: ['require-context-hook']
}
};
А потом я попытался вызвать require.context
так:
// myfile.js
import registerRequireContextHook from 'babel-plugin-require-context-hook/register';
registerRequireContextHook();
const packagesDirectory = path.join(__dirname, '../../../../packages');
const textDataContext = require.context(packagesDirectory, true, /(\w+)\.(\w+)\.(mdx?)/);
Но тогда я получаю эту ошибку:
Ошибка типа: fs.readdirSyn c не является функцией
?
Обновление 3:
Похоже, CRA поддерживает require.context без необходимости в каких-либо полифиллах вообще. Но похоже, что он не работает, когда выполняется через импортированный модуль. В моих предыдущих попытках я выполнял вызовы require.context
в myfile.js
(см. Выше), которые были импортированы index.js
, например, так:
// index.js
import myModules from 'myfile.js';
ReactDOM.render(...);
Однако, если я изменю index.js
на это:
// index.js
const something = require.context('../../packages/', true, /(\w+)\.(\w+)\.(mdx?)/);
something.keys().forEach(key => console.log(key));
ReactDOM.render(...);
Работает как шарм! Почему?!