Size: a a a

Next.js — русскоговорящее сообщество

2020 January 16

I

Iri 🍕 in Next.js — русскоговорящее сообщество
спасибо ребят
пойду попробую сбилдить на дев сервере
источник

YZ

Yury Zhuk in Next.js — русскоговорящее сообщество
Iri 🍕
спасибо ребят
пойду попробую сбилдить на дев сервере
хороший день 😊
источник

I

Iri 🍕 in Next.js — русскоговорящее сообщество
Yury Zhuk
хороший день 😊
цензурного выражения на счет сегодняшнего дня у меня нет)
источник

I

Iri 🍕 in Next.js — русскоговорящее сообщество
на сервере фокус не удался
думаю уже грешным делом скопипастить dist
источник

I

Iri 🍕 in Next.js — русскоговорящее сообщество
код одинаковый, конфиги такие, как сюда кидали, все вроде нормально
источник

I

Iri 🍕 in Next.js — русскоговорящее сообщество
а из файлов там только вот
источник
2020 January 17

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
Привет, подскажите пожалуйста, а как вынести импорты, которые не являются компонентами, в отдельный чанк?
Например bugsnag или библиотеку асинхронного шифрования, которые переиспользуются во многих местах?


https://github.com/zeit/next.js/tree/canary/examples/with-dynamic-import — отлично для компонент.
Но как сказать вебпаку что надо создать отдельный чанк для библиотеки?
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
мне не нужно асинхронно их подкгружать, просто выгрузить в отдельный чанк.
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
что бы в модулях не дублировались
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
волшебными комментариями?
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
была мысль сделать что то вроде
const bugsnag = import(/* webpackChunkName: "reporter" */ '@bugsnag/js');
const bugsnagReact = import(/* webpackChunkName: "reporter" */ '@bugsnag/plugin-react');

но оно вернет промис
источник

🦜

🦜 in Next.js — русскоговорящее сообщество
Anton Nemtsev
была мысль сделать что то вроде
const bugsnag = import(/* webpackChunkName: "reporter" */ '@bugsnag/js');
const bugsnagReact = import(/* webpackChunkName: "reporter" */ '@bugsnag/plugin-react');

но оно вернет промис
import().then
обычный dynamic import
источник

🦜

🦜 in Next.js — русскоговорящее сообщество
const { default: _ } = await import(/* webpackChunkName: "lodash" */ 'lodash');

_.join(['Hello', 'webpack'], ' ');
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
🦜
const { default: _ } = await import(/* webpackChunkName: "lodash" */ 'lodash');

_.join(['Hello', 'webpack'], ' ');
так я же говорю: промис это проблема.
так как top level await в далеком будущем и например если это нужно для изоморфного рендера — может быть невозможно реально подождать пока оно будет доступно
источник

🦜

🦜 in Next.js — русскоговорящее сообщество
Anton Nemtsev
так я же говорю: промис это проблема.
так как top level await в далеком будущем и например если это нужно для изоморфного рендера — может быть невозможно реально подождать пока оно будет доступно
в чем проблема?
источник

🦜

🦜 in Next.js — русскоговорящее сообщество
я не понимаю
источник

🦜

🦜 in Next.js — русскоговорящее сообщество
что будет доступно? если уже доступно
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
пример:
модуль 1:
import React from 'react';

import { BUGSNAG_API_KEY, BUGSNAG_RELEASE_STAGE } from 'constants/env';
let bugsnagClient;

(async () => {
 const bugsnag = await import(/* webpackChunkName: "reporter" */ '@bugsnag/js');
 const bugsnagReact = await import(/* webpackChunkName: "reporter" */ '@bugsnag/plugin-react');

 if (process.env.NODE_ENV !== 'test') {
   bugsnagClient = bugsnag({
     apiKey: BUGSNAG_API_KEY,
     releaseStage: BUGSNAG_RELEASE_STAGE,
     notifyReleaseStages: ['production'],
   });

   bugsnagClient.use(bugsnagReact, React);
 }
})();

export default bugsnagClient;

модуль 2:
import bugsnagClient from 'utils/bugsnag';
const ErrorBoundary = bugsnagClient.getPlugin('react');
export default const App = props => (<ErrorBoundary>…</ErrorBoundary>);

Ивсё сломалось.
Рендер реакт компонента не может быть отложенным, так что никакого await тут не добавишь.
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
Вопрос про динамическую подгрузку контента.
Допустим у меня есть куки полиси для множества языков.
Сами документы — просто маркдаун.
Что бы не инклудить все md в бандл я использовал динамическую подгрузка вот так:
import React from 'react';
import { LOCALE } from 'constants/env';
import { LegalPage } from 'components/templates';

const LegalPageWithData = ({ content }) => (
 <LegalPage content={content} activePage="cookiePolicy" />
);

LegalPageWithData.getInitialProps = async function() {
 const content = await import(
   /* webpackChunkName: "cookiePolicy" */ `content/${LOCALE}/cookiePolicy.md`
 );
 return { content };
}
export default LegalPageWithData;


Неприятность при таком подходе заключается в том, что весь md файл будет вшит в html — это то именно тот способ, которым next передает данные с сервера на клиент в getInitialProps. А это прилично, килобайт 30.

Положить подгрузку в useEffect например я не могу так как оно не грузится на сервере.

Как это положено делать по уму?
источник

AN

Anton Nemtsev in Next.js — русскоговорящее сообщество
В конечном итоге я, вероятно, просто сгенерирую из этого статику, но меня интересует принцип.
Как решают такие задачи?
источник