При запуске приложения получаю ошибку Critical dependency, как исправить?

Ссылка скопирована
1 ответ

Получаю ошибку: "Critical dependency: the request of a dependency is an expression" при использовании динамического импорта файлов. Файл импортирую подобным образом

const loadStepScreen = async (elem: string) => {     if (elem) {       await import(`../screens/ModalScreens/${elem}.tsx`).then((importData) => {         setStepScreen(() => {           return importData.default;         });       })     }   };

const loadStepScreen = async (elem: string) => { if (elem) { await import(`../screens/ModalScreens/${elem}.tsx`).then((importData) => { setStepScreen(() => { return importData.default; }); }) } };

В конфиге бабеля также добавил плагин - @babel/plugin-syntax-dynamic-import. В чём проблема так и не могу разобраться, если название файла статическое, то всё работает, в ином случае не пашет. Чистил кэш npm и переустанавливал node_modules по советам, но это также не помогло

Дополнительно:

Напишите код текстом, оформив его соответствующим тегом.

  • Михаил Р., переделал
  • Так это не работает. Если ты собираешь бандл с чанками (динамическими импортами) - бандлер должен точно знать, что это за чанки (имена файлов). Он не выполняет код, который ты написал, а просто работает с зависимостями, оптимизируя их.

    Проще говоря, ты хочешь заставить его выполнить код, а не обработать.

    Поэтому всё работает, если ты явно задаёшь импорт, а не формируешь его налету.

    Без сборщиков - да, такое сработало бы.

  • muscimolus, использовал подобный подход на одном из проектов, вполне себе работал, но там проект был создан через create-react-app, а на текущем используется свой самописный вебпак и на нём уже не работает. Возможно есть какие-то зависимости для него, но к сожаление нигде найти не могу
  • JadDy, значит там было какое-то изощрение вокруг такого рода импортов.

    Просто это противоречит логике, а почему - постарался выше описать.

    Даже на твоём примере выше. Если, например, значение elem где-то объявлено в контексте выше или имеется какое-то дефолтное значение и в каком-то хуке ты вызываешь эту функцию, в нее да, передаётся значение, но даже в этом случае бандлер, возможно напилит тебе одну из возможных чанок и заменит тебе ссылку в импорте на статичную, именно на ссылку этой чанки. Но делать этого он не будет, потому что это сломает логику, поэтому ты видишь такое предупреждение.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Роман IT Ответ

    Для исправления ошибки Critical dependency в приложении, вам следует выполнить следующие шаги:

    1. Проверьте зависимости вашего приложения. Убедитесь, что все зависимости правильно установлены и обновлены до последних версий. Вы можете использовать команду `npm outdated` или `npm ls` для проверки зависимостей.

    2. Проверьте, есть ли циклические зависимости в вашем приложении. Циклические зависимости могут привести к ошибке Critical dependency. Вы можете использовать инструменты, такие как Webpack Bundle Analyzer, чтобы найти циклические зависимости.

    3. Попробуйте обновить версию Webpack до последней доступной. Иногда обновление Webpack может решить проблему с Critical dependency.

    4. Проверьте конфигурацию Webpack. Убедитесь, что вы правильно настроили модули и зависимости в вашем конфигурационном файле Webpack. Убедитесь, что вы правильно указали пути к модулям и зависимостям.

    5. Используйте `IgnorePlugin` в своем конфигурационном файле Webpack для игнорирования определенной зависимости, которая вызывает ошибку Critical dependency. Но будьте осторожны, так как это может привести к другим проблемам.

    Применение этих шагов должно помочь вам исправить ошибку Critical dependency в вашем приложении. Если проблема не решена после выполнения этих шагов, попробуйте обратиться за помощью к сообществу разработчиков или к разработчикам плагина/библиотеки, вызывающей проблему.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно