Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ tailwindcss Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ css ΠΈ Π·Π°ΠΌΠ΅ΡΠ°Ρ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΠΌΠΎΠΈ ΡΡΠΈΠ»ΠΈ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ. ΠΡΡΠ°ΡΡΡ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Ρ Π·Π°ΠΏΡΡΡΠΈΠ» ΠΏΡΠΈΠΌΠ΅Ρ tailwindcss ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΡΠΈΠ»Ρ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ css, ΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°ΠΌ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π΄Π»Ρ prod.
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Ρ https://github.com/zeit/next.js/tree/canary/examples/with-tailwindcss
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΠΉΠ» index.module.css
Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΈΠ»Π΅ΠΌ
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΈΠ»ΠΈ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ css Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ index.js
ΠΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ css Π²ΡΠ΅ ΡΡΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°Π·Π° Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π±Π΅Π· ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ css
Π― ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ css π€
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ https://github.com/zeit/next.js/issues/10268
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ css Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ css Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ https://stackoverflow.com/a/42969608/943337, Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΡΡΡΠΎΠΉ ΡΠ΅Π³ ΡΠΊΡΠΈΠΏΡΠ°, ΠΈ ΠΌΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΡΠ»Π°ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½Π°.
https://github.com/vercel/next-plugins/issues/455#issuecomment -489452379
import Document, { Html, Head, Main, NextScript } from 'next/document';
import { GA_TRACKING_ID } from '../utils/anayltics';
class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx);
return { ...initialProps };
}
render() {
return (
<Html lang="de">
<Head>
</Head>
<body>
<Main />
<NextScript />
{/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */}
<script> </script>
</body>
</Html>
);
}
}
export default MyDocument;
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ css Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ https://stackoverflow.com/a/42969608/943337, Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΏΡΡΡΠΎΠΉ ΡΠ΅Π³ ΡΠΊΡΠΈΠΏΡΠ°, ΠΈ ΠΌΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΡΠ»Π°ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½Π°.
import Document, { Html, Head, Main, NextScript } from 'next/document'; import { GA_TRACKING_ID } from '../utils/anayltics'; class MyDocument extends Document { static async getInitialProps(ctx) { const initialProps = await Document.getInitialProps(ctx); return { ...initialProps }; } render() { return ( <Html lang="de"> <Head> </Head> <body> <Main /> <NextScript /> {/* Empty script tag as chrome bug fix, see https://stackoverflow.com/a/42969608/943337 */} <script> </script> </body> </Html> ); } } export default MyDocument;
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @ Adrianjs42, Π±ΠΎΠΊΠΎΠ²Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² Ρ ΡΠΎΠΌΠ΅.
Π’Π°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅
https://github.com/vercel/next.js/issues/13058
ΠΡΡΡ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ " _document.js
" ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠ»Π°ΡΡ " no-fouc
" Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Html.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ " _app.js
" ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² " componentDidMount
"
const removeFouc = (foucElement) => {
foucElement.className = foucElement.className.replace('no-fouc', 'fouc')
}
removeFouc(document.documentElement)
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΈ ΡΡΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈ:
.no-fouc {
visibility: hidden;
opacity: 0;
}
.fouc {
visibility: visible;
opacity: 1;
}
ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π² next@^9.4.5-canary.15
! ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈ Π΄Π°ΠΉΡΠ΅ Π½Π°ΠΌ Π·Π½Π°ΡΡ.
@Timer , Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» next@^9.4.5-canary.18
. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠ΅ CSS Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ , Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ material-ui + css
ΠΠΎΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ Ρ ΡΠ°Π±ΠΎΡΠ°Π», ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: https://cluster-11-lwj6nmcgy.vercel.app/ .
@ Prottoy2938 ΠΠ΄Π΅ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. Π― ΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ https://github.com/vercel/next.js/issues/13058#issuecomment -654165987
@Timer , Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»
next@^9.4.5-canary.18
. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠ΅ΡΡΠ°Π½ΠΈΠ΅ CSS Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ , Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°.ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ material-ui + css
ΠΠΎΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ Ρ ΡΠ°Π±ΠΎΡΠ°Π», ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ: cluster-11-lwj6nmcgy.vercel.app .
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎΡ Π²Π°Ρ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ css / ΠΏΠΎΠΏΡΡΠ½ΡΠΌ Π²Π΅ΡΡΠΎΠΌ ΠΈ, Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π²Ρ Π·Π°Π±ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ material-ui: https://github.com/vercel/next.js/issues/7322#issuecomment -653858948
@casperle , Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π΄Π΅Π»Π°Π» ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° . Π― ΡΠ»Π΅Π΄ΠΈΠ» Π·Π° ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ· material-ui ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
Π‘ v9.4.5-canary.28 Π½Π΅ ΠΌΠ΅ΡΡΠ°Π΅Ρ Π² dev ΠΈ Π½Π΅ ΠΌΠ΅ΡΡΠ°Π΅Ρ Π² production.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ "
_document.js
" ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠ»Π°ΡΡ "no-fouc
" Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Html.Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ "
_app.js
" ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² "componentDidMount
"ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΈ ΡΡΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈ: