Путь динамического импорта в webpack 5

Моя среда разработки состояла из Webpack 5, React 18, Typescript 5 и React-router-dom 6.23.0.

  1. Изначально структура моего кода выглядела так:
src
  page
    index.tsx
  route.tsx

В файле маршрута.tsx:

{
    path: '/',
    lazy: async () => {
      const { default: Component } = await import(`./page`)
      return { Component }
    },
}

Это сработало хорошо.

  1. Позже я скорректировал структуру кода следующим образом:
src  
  page
    index.tsx
  route
    index.tsx

Я также изменил файл маршрута/index.tsx следующим образом:

{
    path: '/',
    lazy: async () => {
      const { default: Component } = await import(`../page`)
      return { Component }
    },
}

Это тоже сработало хорошо.

  1. И затем, если я создам новую функцию для достижения этой цели
const lazy = (path: string) => {
  return async () => {
    const { default: Component } = await import(`${path}`)
    return { Component }
  }
}

{
    path: '/',
    lazy: lazy(`../page`),
}

произошла ошибка «Невозможно найти модуль '../страница'».

Почему это произошло и как это исправить?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Webpack нуждается в некоторой подсказке относительно того, где находится ваш динамический модуль в вашей файловой системе. См. динамические выражения в документации по импорту.

Вы можете реструктурировать свой проект, чтобы вложить свои страницы в каталог, чтобы предоставить веб-пакету некоторый контекст относительно того, где находится модуль, или передать только неотносительную часть пути, или передать только базовое имя пути. Некоторые примеры:

использование родительского каталога


const lazy = (path: string) => {
  return async () => {
    const { default: Component } = await import(`../folder/${path}`)
    return { Component }
  }
}

lazy('page')

используя неотносительный путь (не уверен насчет этого)


const lazy = (path: string) => {
  return async () => {
    const { default: Component } = await import(`../${path}`)
    return { Component }
  }
}

lazy('page')

используя базовое имя пути


const lazy = (path: string) => {
  return async () => {
    const { default: Component } = await import(`../page/${path}`)
    return { Component }
  }
}

lazy('index')

Вы также можете отказаться от разделения кода веб-пакета с помощью волшебного комментария webpackIgnore: true .


const lazy = (path: string) => {
  return async () => {
    const { default: Component } = await import(/* webpackIgnore: true */ `${path}`)
    return { Component }
  }
}

lazy('../page')

спасибо за ваш повтор еще раз. Вы мне очень помогаете!

Yao Tao 30.04.2024 15:21

@YaoTao рад, что смог помочь. Удачи с проектом.

morganney 30.04.2024 15:24

Другие вопросы по теме