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

Динамический импорт Webpack на основе имени записи

Я пытаюсь, чтобы Webpack связывал определенные файлы в зависимости от файла записи.

У меня есть несколько входных файлов в моем проекте. Все они используют общие вспомогательные функции (отдельные модули), но некоторые входные файлы используют слегка измененную версию.

Вот что я сделал до сих пор:

entry1.js

import helper from './helper';

helper();

entry2.js

import helper from './helper';

helper();

helper.js

import example from './example';

export default function helper() {
  console.log('common console log for Entry 1 and 2 pages');

  example();
}

example.js

const context = window.__CONTEXT__;

export default require(`./example_${context}`).default;

example_entry1.js

export default function() {
  console.log('specific console log for Entry 1 page only');
};

example_entry2.js

export default function() {
  console.log('specific console log for Entry 2 page only');
};

entry1.html

<script>
  window.__CONTEXT__ = 'entry1';
</script>
<script src="entry1.js" />

Вывод консоли браузера:

общий журнал консоли для страниц входа 1 и 2

конкретный журнал консоли только для страницы «Запись 1»


entry2.html

<script>
  window.__CONTEXT__ = 'entry2';
</script>
<script src="entry2.js" />

Вывод консоли браузера:

общий журнал консоли для страниц входа 1 и 2

определенный консольный журнал только для страницы входа 2


Есть ли способ сделать что-то подобное в example.js?

export default require(`./example_${__CURRENT_ENTRY_FILENAME__}`).default;

Таким образом, Webpack может связывать entry1.js и entry2.js с их специфическими вспомогательными модулями!

И таким образом я надеюсь избавиться от ужасного window.__CONTEXT__ в моих файлах HTML и JS.

Спасибо!

21.06.2017

  • Вы можете поделиться своим репо? 24.04.2020
  • У меня была такая работа раньше в CRA. если вы поделитесь репо, я сделаю решение, зависящее от веб-пакета 24.04.2020

Ответы:


1

Вы можете использовать Динамический импорт модулей, но вам придется использовать промисы:

example.js

exports default (moduleName) => import(`./example_${moduleName}`);

helper.js

import example from './example';

export default function helper() {
  example(__CURRENT_ENTRY_FILENAME__).then((module) => {
    console.log('common console log for Entry 1 and 2 pages');

    module.default();
  });
}
25.04.2020
Новые материалы

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

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

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

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

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

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

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