
Anton
11.05.2016
13:30:40
Мне один раз тоже такое пригодилось, кстати.
Но это была зависимость по нормальному имени, не относительному пути.

Nikita
11.05.2016
13:31:11
форк - означает его поддержку
я не хочу поддерживать весь форк, мне нужно переопределить 1 файл

Google

Anton
11.05.2016
13:32:46
Относительный путь - это значит что ты хочешь часть либы поменять. Та, которую авторы не предполагали отделять как-либо от либы. А для этого есть правильный путь и тот что ты хочешь прикрутить.
Нет разницы поддерживать файл или форк :)
У тебя твой файл будет ломаться и требовать фиксов/поддержки с точно таким же интервалом как и форк :)
по сути ты точно так же поддерживаешь файл

Anton
11.05.2016
13:33:18
Так а в чем сложность поддерживать форк?
Просто мерджить его с оригинальным репозиторием периодически

Nikita
11.05.2016
13:35:09
на самом деле все не так)

Anton
11.05.2016
13:35:12
файл - обновляешь зависимость, чинишь если поломалось.
Форк - мержишь апстрим (обновляешь зависимость), чинишь что поломалось, пушишь, обновляешь зависимость в аппе
Если последние два действия очень напрягают то да, сложно. Если нет, то легко

Nikita
11.05.2016
13:35:17
я автор либы и именно так хочу сделать ее изменение
представь библиотеку компонентов, это не так, но представь
вот я хочу дать возможность переопределить кнопку
другие компоненты тоже могут использовать кнопки, внутри библиотеки

Artur
11.05.2016
13:36:37
А в чем проблема тогда сделать для этого прогаммный интерфейс?
Зачем через webpack'и это делать, когда существуют более подходящие практики для этого?

Nikita
11.05.2016
13:38:05
например? проект же ты вебпаком собираешь

Google

Anton
11.05.2016
13:38:52
то что ты хочешь, должно быть заложено в либе в какой-либо форме.
Например можешь заложить возможность менять это программно, можешь заложить возможность менять это вебпаком (подключать специально через алиасы например, чтобы пользователь либы мог их переопределить)

Artur
11.05.2016
13:39:36
Так продумай интерфейс для переключения нужного компонента. Не знаю, там setComponentLayer(new CustomComponentLayer)?

Anton
11.05.2016
13:39:39
Ты говоришь о том что либа для этого не предназначена, но хочется извратиться и заставить. Примерно с тем же успехом ты можешь регэкспом менять в собранном файле нужные строчки :)

Nikita
11.05.2016
13:39:54
программный интерфейс предполагает ограничения
если я что-то не запрограммирую - это невозможно переопределить

Anton
11.05.2016
13:40:22
Но ты хочешь поменять модуль

Artur
11.05.2016
13:40:28
Это в принципе нельзя переопределить, если ты это не запрограммируешь)

Anton
11.05.2016
13:40:32
ну смотри, у тебя по дефолту используется lodash

Artur
11.05.2016
13:40:36
Модуль же что-то делает

Anton
11.05.2016
13:40:44
любой интерфейс предполагает ограничения.
Если ты хочешь возможность менять либу без ограничений - я тебе уже сказал как это правильно делается ;)

Anton
11.05.2016
13:40:45
Но у либы есть метод, типа setLibrary

Artur
11.05.2016
13:40:50
Ты хочешь переопределить его стандартное поведение.
Или расширить

Anton
11.05.2016
13:41:08
И ты можешь в него передать underscore или еще чего

Nikita
11.05.2016
13:41:08
ребята, вы что-то сложное говорите)
вот есть кнопка
тупая
у нее известен интерфейс
есть библиотека UI, которая использует эту кнопку
и таких компонентов "кнопок" 100шт еще разных

Google

Artur
11.05.2016
13:41:52
Таак
А в чем проблема?

Nikita
11.05.2016
13:41:58
так вот мне нужно понять, как в вебпак прокинуть пути для переопределения вот и все)

Artur
11.05.2016
13:42:17
theme-style?
Если тебе надо переопределять что-то вроде темы (одна кнопка заменяется другой и т.п.), то тогда есть смысл определять некий параметр current theme и от него собирать.

Nikita
11.05.2016
13:43:53
кнопка - это пример. Это может быть что угодно. То, как выглядит сообщение, например

Artur
11.05.2016
13:44:00
Я так понимаю, у тебя должна быть структура типа
themes/
A/
/button.jsx
B/
/button.jsx

Anton
11.05.2016
13:44:20
Мне кажется, что ты пытаешься сделать что-то очень странное
Допустим, у тебя есть либа

Artur
11.05.2016
13:44:29
А ты вот хочешь что-то вроде
THEMEID=A webpack ...

Anton
11.05.2016
13:44:30
классический разговор в духе "не говорите мне что для получения ежа не надо слона на кактус натягивать, лучше расскажите как бы так натянуть чтоб слон не плакал" )

Artur
11.05.2016
13:44:53
?

Nikita
11.05.2016
13:45:34
ох)

Anton
11.05.2016
13:45:39
Наверняка у твоей задачи есть более нормальные решения. Но если ты хочешь решать ее именно так - то никто тебя конечно не остановит )

Anton
11.05.2016
13:45:43
А которой есть кнопка, типа someLibrary.button. Как выходит, что ты не можешь просто сделать someLibrary.button = anotherButton

Nikita
11.05.2016
13:45:48
в общем вы не знаете как в вебпаке это переопределить - ок, не вопрос)

Grigory
11.05.2016
13:46:00
ну так вот самое просто и логичное это программный интерфейс
lib.init({
button: require('./my-own-elephant-button.js')
})

Artur
11.05.2016
13:46:04

Nikita
11.05.2016
13:46:44

Anton
11.05.2016
13:46:48

Google

Nikita
11.05.2016
13:47:10
так я спросил - есть ли стандартная возможность)))
написать понятно, что можно

Anton
11.05.2016
13:47:52
если ты автор либы - юзай алиасы прямо в ней, самое простое решение
алиасы саму на себя

Artur
11.05.2016
13:47:59
А тебе принципиально в сборке не нужны другие компоненты, как я понял?
Т.е. тебе нужно все это на уровне сборки собрать, чтобы лишнего не было?

Nikita
11.05.2016
13:48:36
это скорее плюс такого подхода, а не самоцель
цель - дать возможность переопределить вообще что угодно

Artur
11.05.2016
13:49:05
На уровне сборки?

Nikita
11.05.2016
13:49:09
да

Admin
ERROR: S client not available

Anton
11.05.2016
13:49:16
это вредная утопия )

Nikita
11.05.2016
13:49:18
на уровне рантайма сейчас есть
и это не удобно
а ты что предлагаешь?)

Artur
11.05.2016
13:49:56
Я бы предложил темы.

Nikita
11.05.2016
13:50:09
тема - это ограниченная штука

Anton
11.05.2016
13:50:15
как минимум это "все что угодно" должно быть ограничено.

Nikita
11.05.2016
13:50:28
вот есть сообщение - тут можно кучу вещей изменить

Artur
11.05.2016
13:50:31
Есть у тебя структура проекта, ты ее можешь дублировать в themes/custom директории по именам сборок, например.

Google

Artur
11.05.2016
13:50:50
И подсасывать от туда.

Nikita
11.05.2016
13:50:57
не, это sdk

Artur
11.05.2016
13:50:59
Хотя я все равно не понимаю, зачем это на уровне сборки.

Nikita
11.05.2016
13:51:06
то есть подтягивается как npm модуль
потому что на уровне рантайма это надо учитывать во время разработки

Anton
11.05.2016
13:51:20
А что именно "что угодно" для тебя?

Anton
11.05.2016
13:51:21
Это чревато как минимум тем, что если код, который требует этой либы, будет абсолютно непонятен никому, кроме тябя

Nikita
11.05.2016
13:51:38
наоборот код становится чище
вот смотрите
я пишу require('../common/Button')
дальше кто-то идет и переопределяет этот button на уровне сборки

Grigory
11.05.2016
13:52:27
Я так понимаю в этом типо и смысл захотел любую зависимость любой либы локально заменил получил интерфейс и дальше делай и говнокодь у себя в проекте как хочешь

Nikita
11.05.2016
13:53:15
вот ща хороший пример покажу

Artur
11.05.2016
13:53:27
Давай
А то прям вообще не понятно.

Nikita
11.05.2016
13:53:46
смотрите
есть babel-runtime
как babel предлагает оверайтить его
require('babel-runtime/core/promise').default = require('bluebird')
вот вы мне тоже самое предлагает
а я хочу это на уровне сборки. Что в этом желании не нормального?

Artur
11.05.2016
13:55:35
Ну ок, теоретически идею понял. Хотя, скажем так, у babel реализация тоже корявая.
Тогда тебе нужна некая карта переопределения и резолвер.