2016-12-25 6 views
0

Я надеюсь, что я не нарушаю какой-либо «передовой практике» инженерный материал с этим вопросом, если это так, я буду признателен за ответ, почему ... Так вот:Как настроить приложение или библиотеку на базе webpack?

У меня есть приложение JavaScript , projectA, который является react приложения упаковывается с использованием webpack со следующей конфигурацией выхода:

output: { 
    path: path.resolve(__dirname, 'dist'), 
    filename: 'dist/[name].js', 
    libraryTarget: 'umd' 
}, 

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

Задача и вопрос в том, как настроить модули, которые я получаю от projectA, действовать по-разному, используя их на projectB?

Например:

  1. У меня есть экран от projectA, в котором я хочу, чтобы изменить обработчик кнопки.
  2. На экране от projectA Я хочу добавить дополнительные компоненты для рисования.
  3. Я хочу, чтобы заменить весь модуль из projectA с моим собственным модулем, который принадлежит projectB

Предположения:

  • обоих проектов react -приложений
  • оба проектов упакованы с использованием webpack
  • У меня есть полный доступ к обоим исходным кодом проектов

Этот поток может быть обсуждение и точно не имеют ни одного правильного ответа

ответ

1

Что касается первого пункта, то вы не можете просто заменить обработчик в модуле, который вы используете, когда вы импортировать внешний модуль, вы не должны» т знать о его внутренних структурах и поведении. Если вы хотите такого поведения, вы всегда можете иметь обработчик кнопки в ProjectA, который будет предоставлен в качестве опоры.

Вторая точка, которую вы хотите иметь, также предоставит вам доступ к внутреннему поведению, рендерингу. Вместо того, чтобы искать возможность добавить к этому компоненту ProjectA в ProjectB, единственный способ разрешить его, о котором я мог думать, - либо использовать детей, либо напрямую их отображать как часть класса ProjectA, к которому вы хотите добавить. Или используйте детей и выложите некоторые обертки, которые будут использоваться пользователем ProjectA.

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