è€æ°ã®ããŒãžã§ã³ã³ããŒãã³ãã䜿çšããã¢ããªã±ãŒã·ã§ã³ããããŸãã ãããžã§ã¯ãããã«ããããšãã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãé¢é£ããcssããŒãžãã£ã³ã¯ã®ããããã«è€è£œãããŸãã ããã«ãããèŠèŠçãªãã°ãçºçããŸãã
äŸïŒ some-component
ãããã³initial-page-component-override
ã¯ãæåã®ããŒãžã®DOMã®åãèŠçŽ ã«é©çšãããã¯ã©ã¹ã§ãïŒïŒ
initial-page.chunk.css
// component styles
.some-component { margin-bottom: 10px; }
// page specific override
.initial-page-component-override { margin-bottom: 20px; }
second-page.chunk.css
// component styles
.some-component { margin-bottom: 10px; }
second-page.chunk.cssãDOMã«è¿œå ããããšãã³ã³ããŒãã³ãã¹ã¿ã€ã«ã¯ãæåã®ããŒãžã§å®çŸ©ãããããŒãžåºæã®ã¹ã¿ã€ã«ã®äžã«åé©çšãããŸãã ãªãŒããŒã©ã€ãã倱ãããæåã®ããŒãžã®ã³ã³ããŒãã³ãã«èª€ã£ãããŒãžã³ãé©çšãããããã«ãªããŸããã 泚æïŒããã¯éçºã¢ãŒãã§ã¯åé¡ã§ã¯ãªããæ¬çªã¢ãŒãã§ã®ã¿åé¡ã«ãªããŸãã
åäœãåçŸããæé ã¯ãã³ãŒãã¹ãããããŸãã¯ãªããžããªãæäŸããŠãã ããã
npm i
ã npm run build
ã npm start
ã³ã³ãã€ã«ãããã¹ã¿ã€ã«ã·ãŒãã§ã¹ã¿ã€ã«å®£èšãè€è£œããªãã§ãã ããã ã³ã³ããŒãã³ãã¹ã¿ã€ã«ã¯ãããŒãžåºæã®ã¹ã¿ã€ã«ã®äžã«ïŒç¬èªã®ãã£ã³ã¯ã§ïŒïŒããŒãããå¿ èŠããããŸãã
ç§ã¯ãŸã£ããåãåé¡ãæ±ããŠããŸãïŒ https ïŒ
ããã§ãåãåé¡ïŒcryïŒ
ç§ã¯ããã§ç§ã®åé¡ã説æããŸããïŒ https ïŒ
äœãé²å±ã¯ãããŸããïŒ ç§ã¯ãŸã åãåé¡ãæ±ããŠããããããæ¬çªç°å¢ã«å
¥ããããšãã§ããŸããã
9.3.7-canary.9
ãã¹ãæžã¿
@EduardoPedrosa
ã¹ããŒã¿ã¹ïŒv9.3.7-canary.11ã§ãåé¡ã¯åŒãç¶ãçºçããŸãã
ã¢ããªããžããªã®å ±æã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã³ã³ããŒãã³ãã§ãåæ§ã®åé¡ãçºçããŠããããã§ããã¢ããªã®CSSãã¡ã€ã«ã®ã¹ã¿ã€ã«ã®ç¹ç°æ§ã«ããããããããããã®ã³ã³ããŒãã³ãã«åœ±é¿ãäžããã¢ããªã®ã¹ã¿ã€ã«ã¯ã©ã€ãã©ãªã¹ã¿ã€ã«ã«ãã£ãŠäžæžããããŸããããé«ããããåªå ããå¿ èŠããããŸãã éçºã¢ãŒãã§ã¯åé¡ãªãèŠããŸãããæ¬çªã¢ãŒãã§ã¯åé¡ãããŸãã:(
ïŒ @zeit/next-sass
SCSSã¢ãžã¥ãŒã«ã䜿çšããŠããŸãïŒ
@ zeit / next-sassãŸãã¯@zeit / next-cssã䜿çšããŠãããšãã¯ãé åºãèšå®ãããã³ãã£ã³ã¯éã®éè€ã§ãã¹ãŠãããªãåé¡ãããŸããã§ããã ïŒèãïŒ
ç§ã«ãšã£ãŠã®æ¬åœã®åé¡ã¯ãnextjsã9.3ã«æŽæ°ããcssã¢ãžã¥ãŒã«ã䜿ãå§ãããšãã«å§ãŸããŸãã
ç§ã¯2ã€ã®æ¹æ³ïŒnext-sassãšbuilt-inïŒã®äž¡æ¹ãè©ŠããŸãã-åé¡ã¯äž¡æ¹ã®å Žåã«ååšããŸãã
ç§ã®ã¹ã¿ãã¯ïŒ
1ïŒCSSã¢ãžã¥ãŒã«
2ïŒSCSS
3ïŒ @useã€ã³ããŒãã
å€ãã®ããªãšãŒã·ã§ã³ãè©ŠããŸããããããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸãïŒã¹ã¿ã€ã«ã®éè€ã¯ãããŸããïŒïŒ
1ïŒpackage.jsonïŒ
"@zeit/next-css": "^1.0.1",
"@zeit/next-sass": "^1.0.1",
"next": "9.2.1", (9.4.1 is current)
"node-sass": "npm:[email protected]", (this is dart sass, but can be used default)
2ïŒnext.config.js
const path = require('path')
const withSass = require('@zeit/next-sass')
const withCSS = require('@zeit/next-css')
const withBundleAnalyzer = require('@next/bundle-analyzer')({ // Optional, of course
enabled: process.env.ANALYZE === 'true',
})
module.exports = withBundleAnalyzer(
withCSS(
withSass({
cssModules: true,
sassLoaderOptions: {
// Resolving SASS absolute imports
includePaths: [path.resolve(__dirname, 'src')],
},
cssLoaderOptions: {
importLoaders: 2,
localIdentName:
process.env.NODE_ENV === 'production'
? '[hash:base64]'
: '[name]__[local]__[hash:base64:5]',
},
webpack(config, options) {
// Resolving absolute imports
config.resolve.modules.push(path.join(__dirname, 'src'))
// Make global styles work
config.module.rules.forEach(rule => {
if (rule.test && rule.test.toString().includes('.scss')) {
rule.rules = rule.use.map(useRule => {
if (typeof useRule === 'string') {
return {
loader: useRule,
}
}
if (useRule.loader.startsWith('css-loader')) {
return {
oneOf: [
{
test: new RegExp('.module.scss$'),
loader: useRule.loader,
options: useRule.options,
},
{
loader: useRule.loader,
options: {},
},
],
}
}
return useRule
})
delete rule.use
}
})
return config
},
}),
),
)
3ïŒæ¬¡ã®ãããªã°ããŒãã«ïŒã¢ãžã¥ãŒã«ã§ã¯ãªãïŒã¹ã¿ã€ã«ã®ã€ã³ããŒãïŒ
index.scssïŒ
...
<strong i="19">@import</strong> '~emoji-mart/css/emoji-mart.css';
...
誰ãããã®ãããªæ§æãè©ŠããŠã¿ãã°çŽ æŽãããã®ã§ããããå®éã«æ©èœããããšã確èªã§ããŸãã
ããã眮ãæããããšããå§ãããŸãïŒ
.other-page__component-override { background: pink; }
ãããšãšãã«ïŒ
.other-page .component-override { background: pink; }
ãããã£ãŠãããŒãžåºæã®ã¹ã¿ã€ã«ã¯ãã®ç¹å®ã®ããŒãžã«ã®ã¿é©çšãããŸã=ïŒã
ç§ããã®ãã°ã«åé¡ããããŸãã
next-cssãçµã¿èŸŒã¿ã®cssã«å€æŽããŸãããããããèµ·ãããŸããã
éçºã¢ãŒãã§ã¯åäœããŸãããCSRã䜿çšããå Žåã¯æ¬çªã¢ãŒãã§ã¯åäœããŸããã SSRã§ã¯åé¡ãããŸããã
ç§ã¯çµã¿èŸŒã¿ã®cssãµããŒããåãã次ã®9.4.4ã䜿çšããŠããŸããããã®åé¡ããããŸããããã¯æ¬çªç°å¢ã§çºçããŸãã
次ã®9.4.4ã§ãåãåé¡ã ãããã¯ã·ã§ã³ã¢ãŒãã®ã¿
ããã¯æ¬¡ã®9.4.4ã®æ¬çªç°å¢ã§çºçããã©ãããããã解決çãèŠã€ããŸããã
node-sass
ã䜿çšããå Žåãããã¥ã¡ã³ãããããŸããŸãªãªãã·ã§ã³ãè©Šããæ°ããsassOptions
ãnext.config.js
è¿œå ããããšã§ããã解決ããŸãã
module.exports = {
...,
sassOptions: {
outputStyle: 'expanded',
},
}
åç §ïŒ outputStyle
next build
åŸã«cssã¯ã©ã¹åã確èªãããšãããããã¯æ©èœããŠããããã§ãã
ã圹ã«ç«ãŠãã°ïŒ
@ Howard86ãå ±æããŠããã ãããããšãããããŸããè©ŠããŠã¿ãŸããããããã§ã¯æ©èœããŸããã§ããã ãã«ãã§ãnext-cssãšnext-sassã䜿çšããŠããïŒnextããã®çµã¿èŸŒã¿CSSãµããŒãã§ã¯ãªãããã®åé¡ã§èª¬æãããŠããã®ãšåãåé¡ããããŸãïŒãcss-ãšããŠã€ã³ããŒããããçŽç²ãªcssããã®ã¯ã©ã¹ã§éè€ãçºçããŸãã sassã¹ã¿ã€ã«ã«ç±æ¥ããªãã¢ãžã¥ãŒã«
@ Howard86 @ alexandre-marchina
ç§ã¯æ¬¡ã次ã®9.4.4ããçµã¿èŸŒã¿ã®CSSã䜿çšããŠããŸãããããªãã®ãœãªã¥ãŒã·ã§ã³ãããŸããããŸããã§ããã ïŒæ³£ãïŒ
ç§ã¯antdãšæ¬¡ã®ææ°ã®ãã®ã§åãåé¡ãæ±ããŠããŸãð
åãåé¡ã cssã¯éçºã§ã¯å®å šã«ããŒããããŸããã補åã§ã¯cssã®äžéšã®ãã£ã³ã¯ãããŒããããŸãã
ããã§ãåãåé¡ã
次ã®v9.5.1ã§prodãã«ãã§åãåé¡ãçºçããŸããããdevãã«ãã§ã¯ã¹ã¿ã€ã«ã«åé¡ã¯ãããŸããã
ãã®ãã°ã«ãããnext.jsã§css-modulesã䜿çšã§ããªããªããŸãïŒã¹ã¿ã€ã«ã«ïŒimportantãè¿œå ããããªãããïŒ
ãã®ãã°ã«ãããnext.jsã§css-modulesã䜿çšã§ããªããªããŸãïŒã¹ã¿ã€ã«ã«ïŒimportantãè¿œå ããããªãããïŒ
åºæ¬çãªã¹ã¿ã€ã«ãäžæžãããã¹ã¿ã€ã«ã®ç¹ç°æ§ãé«ããããšãã§ããŸãã ããšãã°ãButton <-IconButton <-MoreSpecificButtonãšããŠã³ã³ããŒãã³ãã®äŸåé¢ä¿ãèšå®ããŸãããã ãã®å ŽåãButtonã«ã¯ç¬èªã®ã¹ã¿ã€ã«ããããå¥ã®ããŒãžã«åãæ¿ãããšåèªã¿èŸŒã¿ããããããIconButtonããã³MoreSpecificButtonã®ã¹ã¿ã€ã«ãäžæžããããŸãã IconButtonã®ã¹ã¿ã€ã«ã.className.className
ãšããŠå®çŸ©ãããŠããŠãMoreSpecificButtonã®ã¹ã¿ã€ã«ã.className.className
ãšããŠå®çŸ©ãããŠããå ŽåãButtonã¯ããããªãŒããŒã©ã€ãããŸããã ãããŠãCSSã§IconButtonã¹ã¿ã€ã«ãšMoreSpecificButtonã¹ã¿ã€ã«ã®é åºãæ£ãããšããäºå®ããããšãMoreSpecificButtonã®ã¹ã¿ã€ã«ã¯åžžã«IconButtonããªãŒããŒã©ã€ãããŸã-æåŸ
ãããŸãã
次ã®v9.5.1ã§prodãã«ãã§åãåé¡ãçºçããŸããããdevãã«ãã§ã¯ã¹ã¿ã€ã«ã«åé¡ã¯ãããŸããã
åãåé¡ãçºçããŠããŸãã
TailwindãBootstrapã§+1ã çŸåšã®åé¿çã¯ã_document.jsã®linkrelãä»ããŠãã¹ãŠã®ã¹ã¿ã€ã«ãã€ã³ããŒãããããšã§ãã Tailwindã®å Žåãã«ã¹ã¿ã cssãã«ãã§ãã ãã®åé¡ã¯éåžžã«åä»ã§ãã
ç§ã¯è¿œã颚ã®ããcssã¢ãžã¥ãŒã«ã䜿çšããŠããŸãïŒéåžžã®ã°ããŒãã«cssã€ã³ããŒãïŒã cssãã€ã³ã©ã€ã³åãããšãããŒãã®é åºã解決ãããŸããããããã§ãéè€ããŠãããã©ããã¯ããããŸãããããã¯åãªãåé¿çã§ãã ãããã¯ã·ã§ã³ã§ã¯ãã¹ã¿ã€ã«ãå¥ã®ã¹ã¿ã€ã«ãäžæžãããŠããããšã«æ°ã¥ããŸããã§ããã
https://github.com/vercel/next-plugins/issues/238#issuecomment -432211871
ããã¯ãææ°ã®Next.jsã«ããªã¢ã§ä¿®æ£ãããŠããŸãã next@^9.5.3-canary.7
ã¢ããã°ã¬ãŒãããŠããç¥ãããã ããã
äŸãšããŠãè¡ã®é«ãããã©ã³ãã®å€ªããèæ¯è²ãå¢çç·ã¯devãšprodã§ç°ãªããŸãã
@talaikisã¯ãå®å
šã«åçŸå¯èœãªãã¢ã§æ°ããåé¡ãéããŠãã ããïŒ ç§ã¯ãã®è€è£œã§äžããããæ£ç¢ºãªã³ãŒããšcanary
åäœããã¹ãããŸããã
ç§ã«ä¿®æ£ããŸãããããã¯å¥ã®ããé倧ãªåé¡ãåŒãèµ·ãããŸãã
ç§ã®å Žåã Router.push(
localhostïŒ3000 /ïŒchange ) coming from
localhostïŒ3000 `ã䜿çšããŠããã·ã¥URLã®ã¿ãå€æŽãããšããã¹ãŠã®ã¹ã¿ã€ã«ã·ãŒããå床ãªããŒããããç»é¢ãç¹æ»
ããŸãã
9.5.3-canary.9
ããè©Šãããã ããŸããïŒ
@Timerãnpm i
ãŸãïŒ
9.5.3-canary.9
è©ŠããŸããããããã§ãããã·ã¥ã®åé¡ã解決ããŸããã
èšåããŸããã§ãããã 9.5.2
ããã 9.5.3-canary.6
ã«ç§»è¡ãããšãã«ãŒã¿ãŒã䜿çšããŠäžèšã®ããã«ããã·ã¥ãå€æŽãããšãdevtoolsã³ã³ãœãŒã«ã«ããšã©ãŒãçºçããŸãã
åé¡ã¯9.5.3-canary.5
ååšããŸããã
@fabinppkè€è£œã§æ°ããå·ãéããŠãã ããïŒ
å
ã®åé¡ã9.5.3-canary.9
ã§ä¿®æ£ãããŠããããšã確èªãããã£ãã ãã§ãã ããããšã@Timer
@petewarmanã確èªããŠããã ãããããšãããããŸãïŒ
@ã¿ã€ããŒç¢ºãã«ã ä¿®æ£ã¯åé¡ãªããdevtoolsã®ãã®åé¡ãšã¯é¢ä¿ããªããšæããŸãã
ããããšãããããŸããã ïŒ+1ïŒ
ããã9.5.6-canary.11
ã§ãŸã çºçããŠããããšã確èªã§ããŸããã¯ã©ã¹
@glottonousãã®åé¡ã§ã³ã¡ã³ãããããã¹ãŠã®åé¡ã¯ãã¿ã€ããŒã«ãã£ãŠè§£æ±ºãããŸããã
远䌞ïŒç§ã¯9.5.5ã䜿çšããŠããŸãã ðð
@fabinppk 9.5.6-canary.11
æç¹ã§ãåãåé¡ãçºçããŠããããšã確èªã§ããŸãã
@glottonousããŒãžã§ã³9.5.6-canary.11
ã䜿çšããŠãããžã§ã¯ãã§ããã€ãã®ãã¹ããè¡ããŸããããåé¡ã¯ãããŸããã§ããã
æ¬åœã«åé¡ãããå Žåã¯ããããåç §ããŠæ°ããåé¡ãéããŠãã ããã ïŒ+1ïŒ
nextjs 10ã§ã¯ãåãåé¡
åãåé¡10.0.1
åçŸå¯èœãªãã¢ã§ïŒ19055ãéå§ããŸããã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯ãŸã£ããåãåé¡ãæ±ããŠããŸãïŒ https ïŒ