Nano Hash - криптовалюты, майнинг, программирование

Можно ли использовать require.context для динамического импорта Webpack?

В настоящее время я использую require.context для загрузки всех моих .vue компонентов, имя файла которых не заканчивается на Async.

const loadComponents = (Vue) => {
    const components = require.context('@/components', true, /\/[A-Z](?!\w*Async\.vue$)\w+\.vue$/);

    components.keys().forEach((filePath) => {
        const component = components(filePath);
        const componentName = path.basename(filePath, '.vue');

        // Dynamically register the component.
        Vue.component(componentName, component);
    });
};

Теперь я хочу загрузить свои компоненты, которые заканчиваются на Async на require.context, чтобы мне не приходилось вручную добавлять их каждый раз, когда я создаю новый компонент этого типа.

Обычно синтаксис динамического импорта выглядит так:

Vue.component('search-dropdown', () => import('./search/SearchDropdownAsync'));

Это будет разрешено с помощью обещания и динамического импорта компонента.

Возникающая проблема заключается в том, что когда вы используете require.context, он немедленно загружает (требует) компоненты, и я не могу использовать динамический импорт.

Есть ли способ совместить require.context с синтаксисом динамического импорта Webpack?

https://webpack.js.org/guides/code-splitting/#dynamic-imports


  • вы когда-нибудь находили решение? 11.12.2018
  • Смотри сюда! github.com/webpack/webpack/issues/7283#issuecomment-389281376 11.12.2018
  • Спасибо, в то время, когда этот вопрос был опубликован, он касался Webpack 3. В Webpack 3 такой возможности не было. 12.12.2018

Ответы:


1

Есть четвертый аргумент для require.context, который может в этом помочь.

https://webpack.js.org/api/module-methods/#requirecontext

https://github.com/webpack/webpack/blob/9560af5545/lib/ContextModule.js#L14

const components = require.context('@/components', true, /[A-Z]\w+\.(vue)$/, 'lazy');
components.keys().forEach(filePath => {

  // load the component
  components(filePath).then(module => {

    // module.default is the vue component
    console.log(module.default);
  });
});
19.02.2019
  • Это гениальное решение! 11.06.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..