Size: a a a

Webpack — русскоговорящее сообщество

2020 July 21

y

ymdev in Webpack — русскоговорящее сообщество
Можно было оставить сборку через tsc, конечно. Но там некоторых штук нет, которые поддерживает бабель
источник

BA

Bogdan Aleksandrovic... in Webpack — русскоговорящее сообщество
ymdev
не знаю на счет ноддемона, что ты там хотел, но касательно ssr и react.
Условно, тебе нужно 2 клиента:
1) с hydrate, который будет подключен в браузере через скрипт
2) для сервера, в котором будет StaticRouter и прочее

Вот для клиента конфиг https://pastebin.com/GDQ1JMV6
И условно точно входа для этого конфига
import React from 'react'
import { hydrate } from 'react-dom'
import { loadableReady } from '@loadable/component'
import App from './App'

loadableReady(() => {
   hydrate(
       <App />,
       document.getElementById('root')
   )
})


Вот для сервера конфиг (из-за jsx приходится весь сервер собирать) https://pastebin.com/b9cug8Ur
И точка входа для серверной сборки клиента
import React from 'react'
import { renderToString } from 'react-dom/server'
import { ChunkExtractor } from '@loadable/server'
import { IStore } from '../../../client/src/types/store'

import ReduxProvider  from '../../../client/components/ReduxProvider'
import RouterProvider from '../../../client/components/RouterProvider'
import App            from '../../../client/components/App'

import store from '../../../client/store'

interface IRenderApp {
   html:    string
   store:   IStore
   scripts: string
   links:   string
   styles:  string
}

export default function renderApp(url: string, context: object = {}): IRenderApp {
   const statsFile = '../../../dist/client/loadable-stats.json'
   const extractor = new ChunkExtractor({
       statsFile,
       entrypoints: [ 'app' ]
   })
   const jsx = extractor.collectChunks(
       <ReduxProvider>
           <RouterProvider
               location={ url }
               context={ context }
           >
               <App />
           </RouterProvider>
       </ReduxProvider>
   )
   const html  = renderToString(jsx)
   const redux = store.getState()
   const scripts = extractor.getScriptTags()
   const links   = extractor.getLinkTags()
   const styles  = extractor.getStyleTags()

   return {
       html,
       store: redux,
       scripts,
       links,
       styles
   }
}
у тебя тут видимо ошибки в путях или нет?
источник

BA

Bogdan Aleksandrovic... in Webpack — русскоговорящее сообщество
у сервера путь как у клиента
источник

A

Alex CherryTea in Webpack — русскоговорящее сообщество
ymdev
Там ts + jsx + фичи, поддерживаемые бабелем и декораторы. Поэтому сунуть это все под один сборщик - нормальная идея
ну там вроде ничего критического
источник

y

ymdev in Webpack — русскоговорящее сообщество
Bogdan Aleksandrovich
у тебя тут видимо ошибки в путях или нет?
может быть. Я вытащил это с варианта, который никогда не запускался) Так как рабочий код нельзя трогать, иначе по голове не подгладят(
источник

BA

Bogdan Aleksandrovic... in Webpack — русскоговорящее сообщество
да я уже перетыкал все, не импортирует, что то с путями
источник

y

ymdev in Webpack — русскоговорящее сообщество
Bogdan Aleksandrovich
да я уже перетыкал все, не импортирует, что то с путями
еще не разобрался?
источник

BA

Bogdan Aleksandrovic... in Webpack — русскоговорящее сообщество
не
источник

y

ymdev in Webpack — русскоговорящее сообщество
Я короче накидал минимум https://github.com/ym-project/react-ssr-example
В README написано, как запустить
источник

y

ymdev in Webpack — русскоговорящее сообщество
Главная особенность, я не стал собирать сервер. Я подготовил клиент под него. И просто потом сделал require
источник

BA

Bogdan Aleksandrovic... in Webpack — русскоговорящее сообщество
сейчас буду смотреть, что там
источник

y

ymdev in Webpack — русскоговорящее сообщество
Bogdan Aleksandrovich
сейчас буду смотреть, что там
исправь только "build:client": "NODE_ENV=production webpack --mode production", в package.json на "build:client": "cross-env NODE_ENV=production webpack --mode production",

А то у тебя ж винда. Не запустишь(
источник

DM

Dmitry Makarov in Webpack — русскоговорящее сообщество
Wsl работает гуд
источник

ЖЕ

Женя 🐍 Егоров... in Webpack — русскоговорящее сообщество
Всем привет, тут есть пользователи workbox-webpack-plugin ?

Проблема следующая: я с помощью этого плагина кеширую все ресурсы, включая index.html. Когда наш браузер загружает новый файл service-worker со всей инфой по кешам, он сравнивает эти кеши с локальными и видит, что файл index.html и app.js обновился, загружает их, складывает в кэш, но...
сама страница не обновляется (т.е. в браузере остается открыт старый index.html).
И я не понимаю че делать, либо как-то тормозить открытие страницы до момента, когда прогрузится service-worker.js и с ним обновятся все кеши, либо как-то триггерить через postMessage вызов location.reload()

https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-broadcast-update.BroadcastCacheUpdate

нашел решение в принципе, но как его в связке с workbox-webpack-plugin юзать - непонятно
источник

DL

DJ Kolya Lodo4kin in Webpack — русскоговорящее сообщество
привет, подскажите как называется тема когда хотят сделать два js файла под разные модули? Например юзерский модуль и админский?
источник

KA

Kenan Ayvazov in Webpack — русскоговорящее сообщество
DJ Kolya Lodo4kin
привет, подскажите как называется тема когда хотят сделать два js файла под разные модули? Например юзерский модуль и админский?
Можно импортировать в кор сайта, в зависимости от роли
источник

KA

Kenan Ayvazov in Webpack — русскоговорящее сообщество
Само собой, эти импорты должны быть динамическими
источник

DL

DJ Kolya Lodo4kin in Webpack — русскоговорящее сообщество
Kenan Ayvazov
Само собой, эти импорты должны быть динамическими
Через вебпак если настраивать кк эта настройка называется?
источник

KA

Kenan Ayvazov in Webpack — русскоговорящее сообщество
DJ Kolya Lodo4kin
Через вебпак если настраивать кк эта настройка называется?
Гугли dynamic/async import webpack
источник

DL

DJ Kolya Lodo4kin in Webpack — русскоговорящее сообщество
Kenan Ayvazov
Гугли dynamic/async import webpack
Хорошо попробую поискать
источник