
Dmitrii
29.04.2016
18:51:24
на сервере нужно будет распарсить
https://github.com/expressjs/multer
как пример

Evgeniy
29.04.2016
18:52:49
На клиенте через formdata можно?

Google

Evgeniy
29.04.2016
18:52:56
Append

Dmitrii
29.04.2016
18:53:19
ага

Evgeniy
29.04.2016
18:53:37
Ну все, теперь дело пойдёт

Dmitrii
29.04.2016
18:54:01
??

Evgeniy
29.04.2016
18:56:14
А подскажи как лучше картинки хранить, оригинал и миниатюры или лучше оригинал а потом при запросе нужный размер отдавать?

Dmitrii
29.04.2016
18:57:16
зависит от скейла. на небольшом скейле можно ресайзить+кешировать и отдавать
на большом такое уже не прокатит :)

Evgeniy
29.04.2016
18:58:57
Ну как бы я для себя делаю как хобби. Но стараюсь делать как правильно, то есть, при сохранении на сервере создавать миниатюры?

Viacheslav
29.04.2016
18:59:25
твиттер ресайзит а через N времени удаляет миниатюры
когда твит ушел в историю
вроде 20 дней постчитали

Dmitrii
29.04.2016
18:59:49
если для хобби, то не важно.. основная проблема в том что если хранишь оригинал + 100x100

Viacheslav
29.04.2016
18:59:51
так что да, зависит от проекта

Google

Dmitrii
29.04.2016
18:59:59
когда меняется дизайн и нужно 120x120
приходится расайзить все :)
ну или как твитте
делать долгий кеш

Evgeniy
29.04.2016
19:00:35
Эх, сколько же много тонкостей

Dmitrii
29.04.2016
19:00:46
поэтому всегда начинай с того что проще и работает
и когда появится проблема со скейлом, начинай смотреть на мелочи :)

Evgeniy
29.04.2016
19:01:11
Спс

Viacheslav
29.04.2016
19:01:32
@dmitriiabramov некоторые решения могут покалечить, например не хранить оригиналы :)
так что о чем-то нужно задуматься

Dmitrii
29.04.2016
19:02:00

Evgeniy
29.04.2016
19:02:07
)))

Dmitrii
29.04.2016
19:02:10
но думать слишком много это тоже проблема

Evgeniy
29.04.2016
19:03:51
У node.js с отдачей статики нет проблем, или лучше на nginx перевести

Viacheslav
29.04.2016
19:04:00
@dmitriiabramov о, а у тебя есть что сказать по поводу
https://www.facebook.com/groups/moscowjs/permalink/1206065032751729/

Evgeniy
29.04.2016
19:04:31
Хм тогда не ясно как ресайзить на лету

Artem
29.04.2016
19:07:35
ресайз происходит или при сохранении, или при запросе, если в кеше нет, в первом случае отдавать уже через nginx можно, так как путь до файла уже есть, во втором нужно нодой готовить картинку

Evgeniy
29.04.2016
19:12:51
Ок
Спс
Буду делать

Google

Denis
29.04.2016
19:24:05
Как сделать несколько бандлов (один язык = один бандл) правильней? loader, plugins?
entry: {
'default': [
'./react-app/index.jsx?locale=en-US',
Есть какая-то возможность в index.jsx подхватить query?
хотя вот это же работает webpack-hot-middleware/client?path=http://0.0.0.0:8080
if (__resourceQuery) {
var querystring = require('querystring');
var overrides = querystring.parse(__resourceQuery.slice(1));
Прекрасно

Alexander
29.04.2016
19:34:10
Нихуя не понял. Ладно.

Denis
29.04.2016
19:45:15
Во, можно ещё: expose?__I18N_LOCALE__!./i18n/en_US.json

Oleg
29.04.2016
19:46:02
а почему не через ENV_VAR какой-нить?

Denis
29.04.2016
19:48:34
require('./i18n/' + process.env['LOCALE'] + '.js') ?
DefinePlugin обработает модули до резолв?

Oleg
29.04.2016
19:48:59
ну это же в конфиге вебпака? (уебищно, да =)
нет вроде
но я бы проверил

Denis
29.04.2016
19:52:46
Вроде тоже нет, хотя может и да

Oleg
29.04.2016
19:53:27
нужен конфиг к конфигу.
config fatigue ?

Dmitrii
29.04.2016
19:54:17

Denis
29.04.2016
19:54:17
@DenisIzmaylov https://github.com/perchlayer/po-loader чекни примеры, может что полезное выдернешь

Ҫѐҏӗѫӑ
29.04.2016
19:54:56
юзали этот лодер кстати

Viacheslav
29.04.2016
19:54:56
@DenisIzmaylov а что не require.ensure?

Google

Denis
29.04.2016
19:57:41
entry: {
'default': [
'./react-app/index.jsx',
'./scss/all.scss'
],
'default-en_US': [
'expose?i18n!./i18n/locales/en-us.json',
'./react-app/index.jsx',
'./scss/all.scss'
],
вроде работает
а как ensure применить для этого?
необходимо SSR + SPA
т.е. догружать ещё один JS чё-то не хочется
https://webpack.github.io/docs/api-in-modules.html

Paul
29.04.2016
20:22:40
^^ А если у тебя будет 50 языков, ты будешь 50 entry point обявлять? ;)

Denis
29.04.2016
20:23:45
да ;)
https://github.com/browniefed/react-webpack-empty-starter/blob/master/make-webpack-config.js
как только люди не извращаются :)
Паш, я у этой банды научился =)

Paul
29.04.2016
20:27:33
Только en-us это плохо. Тексты у тебя для en все одиныковые, а вот локали меняют форматирование (дат, чисел)
Так что тексты в en, а настройки Intl уже подгоняются под локаль пользователя.
Чтобы у всех en-US en-GB en-AU, были теже английские тексты но с разным форматированием

Denis
29.04.2016
20:29:36
Спасибо

Paul
29.04.2016
20:30:00
И не надо ограничивать себя json, используй стандартный js, там всякое может творится. Например,подставлятся дополнительные тексты от бекенда во время сборки или пишутся специфические для intl правила eslint

Denis
29.04.2016
20:30:54
Всегда можно съехать при необходимости, но я скорее вижу то, что перевод будет браться во время сборки из БД
А куда копнуть за локалями Intl?
https://github.com/yahoo/react-intl
вроде их явно не задаёт

Paul
29.04.2016
20:33:05
http://formatjs.io/guides/basic-i18n/
Ну и с Intl играться, react-intl его использует внутри
// US English uses month-day-year order
console.log(new Intl.DateTimeFormat('en-US').format(date));
// → "12/19/2012"
// British English uses day-month-year order
console.log(new Intl.DateTimeFormat('en-GB').format(date));
// → "20/12/2012"

Google

Denis
29.04.2016
20:34:34

Paul
29.04.2016
20:35:36
Я не говор про билды, а говорю про способ задания конфига.
Нужно уметь просто задавать сборщику массив из языков, а не копи-пастить entry-points)

Denis
29.04.2016
20:36:19
Понял, да

Denis
29.04.2016
20:36:44
Как для webpack это сделать?

Ҫѐҏӗѫӑ
29.04.2016
20:36:58
Себастьян недавно писал, что у них куча говнокода там в фб

Denis
29.04.2016
20:37:08
Они поэтому и опенсорсить начали

Ҫѐҏӗѫӑ
29.04.2016
20:37:10
поэтому многое не опенсорс

Denis
29.04.2016
20:37:20
Чтобы в порядок приводить начать

Paul
29.04.2016
20:40:17
Они поэтому и опенсорсить начали
Генерировать конфиг вебпака на лету, исходя из человекочитаемого общего конфига проекта.
Плюс всякие плюшки типа генерации итоговых скриптов для каждого языка паралелльно, используюя все ядра процессора
Начни с одного etry-point и меняй его вместе с любыми другими параметрами конфига на лету

Denis
29.04.2016
20:43:53
Я сейчас вижу такой процесс:
1. babel-plugin-react-intl извлекает сообщения в директорию src/i18n/messages
2. сборщик накладывает существующую локализацию поверх каждого перевода, чтобы было понятно, что ещё не переведено (в будущем - работа через внешний веб-сервис)
2. в webpack-конфиге функция проходит все файлы перевода и добавляет entry

Paul
29.04.2016
20:44:26
Я помимо умножения бандла на языки еще и умножаю на два: для современных браузеров с поддержкой es6 и для остальных. Соответсовенно, разные настройки бабел-лоадера и externals. Все это делается динамически с использованием фермы (чтобы загрузить все ядра).
Чтобы в итоге получить что-то типа app.en.js, app.en.compatible.js, app.fr.js, app.rf.compatible.js, etc.

Denis
29.04.2016
20:46:05
Ты компилируешь отдельно для топовых?

Paul
29.04.2016
20:46:32
Да, в деве с hmr для каждого и в проде.

Denis
29.04.2016
20:47:00
А как все ядра процессора загружаешь?
> Начни с одного etry-point и меняй его вместе с любыми другими параметрами конфига на лету
По другому и не рассматривали - пример он и был для того пример. :)

Paul
29.04.2016
20:48:08
В деве тот-же принцип - каждый webpack-dev-server для каждого былда сидит на отдельном процессе, паралелльно, так что все доступно сразу, с какгого браузера не зайди. Изначально я это делал в прошлом году чтобы не использовать sourcemap - это ускоряет сборку и hmr раза в два