次ã®ãšã©ãŒãçºçãããããããã±ãŒãžããã¹ã¿ã€ã«ã·ãŒããã€ã³ããŒãããããšã¯ã§ããŸããã
Global CSS cannot be imported from files other than your Custom <App>. Please move all global CSS imports to pages/_app.tsx.
Read more: https://err.sh/next.js/css-global
ãããã©ãããæ¥ãŠããã®ãã¯ç解ããŠããŸãããã³ãŒãåå²ãäžå¯èœã«ãªã£ãŠããŸãã ã³ã³ããŒãã³ãã©ã€ãã©ãªããã³ã³ããŒãã³ããã€ã³ããŒãããå Žåã¯ãCSSãã€ã³ããŒãããå¿ èŠããããŸãã ã»ã¬ã¯ã¿ãŒã®ã¹ã³ãŒããæ£ããèšå®ããŠããªãã©ã€ãã©ãªãŒããããããããŸããããããã§ããã®èŠåãäžæžãããã®ãæ¢ããããšã¯ã§ããŸããã ã©ã€ãã©ãªããã€ã³ããŒããããCSSã¯ãæ¬è³ªçã«ãã°ããŒãã«ãã§ã¯ãããŸããã
import "my-library/index.css"
yarn dev
ãã¡ã€ã«ãã€ã³ããŒãããå¿ èŠããããŸãã
ç§ã¯ãããã®å¯èœãªè§£æ±ºçãèŠãŸãïŒ
next.config.js
ã°ããŒãã«ãã©ã°ããã«ã€ããŠã¯ä»¥åã«è°è«ããããŸããã
ã¹ã¿ã€ã«ã·ãŒãã¯æ¬è³ªçã«ã°ããŒãã«ã§ãããããã«ã¹ã¿ã ã«ã€ã³ããŒãããå¿ èŠããããŸã
æåã ããã¯ãã°ããŒãã«ã¹ã¿ã€ã«ã®ã¯ã©ã¹åãšé åºã®ç«¶åãåé¿ããããã«å¿ èŠã§ãã
ç§ã¯ãã®å£°æã«åæããŸããããã®çç±ã¯ãå€éšã©ã€ãã©ãªãCSSã¢ãžã¥ãŒã«ã䜿çšããããããCSSãã¡ã€ã«ãšããŠããã±ãŒãžåããŠã€ã³ããŒãã§ããããã§ãã ããã¯å®å šã«æå¹ã§äžè¬çãªæ¹æ³ã§ãããå¯äœçšã¯ãã
_app
ã§ã®ã°ããŒãã«ã€ã³ããŒããæ£ããéžæã§ããããããã®åé¡ã¯è§£æ±ºãããŸããã
ãã®ã³ã¡ã³ãã¯æ£ç¢ºãªåé¡ã説æããŠããŸãããåé¡ã解決ããããããå¿çããããŸããã ã³ã¡ã³ãã«ã¯å€ãã®è¯å®çãªåå¿ããã£ãã®ã§ããã®åé¡ãæ±ããŠããã®ã¯ç§ã ãã§ã¯ãªããšæããŸãã
ç¡é¢ä¿ã®ããã§ãã
é¢é£ããŠãããããããŸããããããããããŸããã
ã«ã¹ã¿ã ã¢ãŒãã¯ãŒã¯ãã€ã³ã¿ã©ã¯ãã£ããªã€ã©ã¹ãããããã䜿ã£ãé·ãèšäºãæžããŠããŸãã èšäºã§ã¯ãããªãã®CSSã§SVGãã¬ã³ããªã³ã°ããreactã³ã³ããŒãã³ããåãããã©ã€ããŒãnpmããã±ãŒãžã䜿çšããŠããŸãã ãããã®ããã±ãŒãžã¯CSSã¢ãžã¥ãŒã«ã䜿çšãã index.js
ãšindex.css
ããšã¯ã¹ããŒãããŸãã ãã¹ãŠã®CSSãã¡ã€ã«ã_app
è¿œå ãããšãããŒã ããŒãžããåãåãããã©ãŒã ããŸãã¯ãã®ä»ã®èšäºã100ïŒ
䜿çšãããŠããªããŠãããã¹ãŠã®CSSãèªã¿èŸŒãŸããŸãã ãŸããã»ãšãã©ãã¹ãŠã®ããŒãžã_app
CSSã€ã³ããŒãã«å¯Ÿå¿ããŠããããããã¡ã€ã«ã·ã¹ãã ã«ããŒãžãåŠçãããããšã«ãå察ããŸãã
ç§ã¯ãç¬èªã®ã¯ã©ã¹åãã¹ã³ãŒãããLinariaã䜿çšããããšããŠããã ãã§ããããšåãåé¡ã«çŽé¢ããŠããŸãã ãããçæããcssãã¡ã€ã«ã¯.module.css
ã§çµãããªããããããã¯ãã¢ãžã¥ãŒã«ãã§ããã ã©ã€ãã©ãªãšçµ±åããç°¡åãªæ¹æ³ãå¿
èŠã§ãã
ãªãåã³nextjsã«åãæ¿ããã®ã§ããïŒ
node_modulesã®å€éšã§ãGlobalCSSã䜿çšã§ããããã«ããããšæããŸãã ããã¯ãCSSã¢ãžã¥ãŒã«ã段éçã«æ¡çšããã®ã«åœ¹ç«ã¡ãŸã
ãããããã¯éåžžã«éèŠã§ãïŒ å€ãã®npmããã±ãŒãžã¯nextjsã§ã¯æ©èœããŸããããCRAãŸãã¯ä»ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯æ©èœããŸã
@use
ãµããŒããsassã¢ãžã¥ãŒã«ãªã©ã®dart sassã®jså®è£
ã§ããã䜿çšããããšããŠããä»ã®äººã«ãšã£ãŠãnode-sassã«äŸåããä»ã®ããŒãã¢ãžã¥ãŒã«ãããå Žåã¯ãããã©ã«ãã®æ¬¡ã®ã»ããã¢ããsassã®ä»£ããã«node-sassã䜿çšããŸãã ããŒã«ã«ã§ã¯ã次ã®ããã«ããŠä¿®æ£ããŸããã
// example next.config.js
module.exports = {
webpack(config, options) {
config.module.rules.forEach(rule => {
if (rule.oneOf) {
const nestedScss = rule.oneOf.find((one) => {
return one.test
&& 'some.scss'.match(one.test)
&& one.issuer
&& one.issuer.include
&& one.issuer.include.includes('_app');
});
if (nestedScss) {
const sassLoader = nestedScss.use.find(u => u.loader.includes('sass-loader'));
// Set implementation to sass instead of node-sass here.
sassLoader.options.implementation = require('sass');
}
}
})
}
}
次ã«ãscssãã¡ã€ã«ã_app.js
ã«ã€ã³ããŒãããå¿
èŠããããŸãã
@smurrayatworkããã¯ã³ãŒãã£ã³ã°ã§ã¯ãªããããã³ã°ã§ãç³ãèš³ãããŸãã
ãŸããæä»çã«_app.jsã§ãããšããå¶éã¯ãå°ãé¢åã§ãã
ã©ãã§ãCSSåç
§ããµããŒãããªãå Žåã¯ãCSSã_app
çŽæ¥ã®äŸåé¢ä¿ïŒä»ã®å Žæã§ã¯åç
§ãããŠããªãïŒãããåç
§ã§ããããã«ããããšãã§ããŸããïŒ
ããªãã¡ã ã€ã³ããŒãã«åºã¥ããŠCSSã«æ±ºå®è«çãªé åºãäžããã _app
ïŒããã³ä»ã®å Žæã§ã¯ãªãïŒã§å¿
èŠãªå Žåã¯åé¡ãããŸããã
çæ³çã§ã¯ãããŸããããç§ãæã£ãŠãããŠãŒã¹ã±ãŒã¹ã¯ãå ±æCSSãã€ã³ããŒãããå ±æã¢ãžã¥ãŒã«ãã€ã³ããŒãããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå ±æããã1ã€ã®ã³ãŒãããŒã¹ã§ãã ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã_app.jsã§ãããã®å ±æCSSã€ã³ããŒããè€è£œããã®ã¯å«ã§ãã çŸåšããããåé¿ããã«ã¯ãä»ã®ã¢ãžã¥ãŒã«ã§cssãå¿ èŠãšããªããããããã€ãã®åã£ãjsã¡ã¿ããã°ã©ãã³ã°ãè¡ãå¿ èŠããããŸãã
代ããã«ãçŸåšã®ã¢ãããŒããæ©èœãããããšæããŸããã€ãŸãããã¹ãŠã®å ±æCSSãã€ã³ããŒããããAppFactoryãããããŸãã 次ã«ã_appã¯ãã¡ã¯ããªã䜿çšããå ±æCSSã®äžã«ç¬èªã®CSSãã€ã³ããŒãããŸãã
ãã®åé¡ã«é¢é£ããŠãããšæãã®ã§ã httpsïŒ//github.com/vercel/next.js/discussions/13991ãè¿œå ã
ããã«+100ã ããŒãã¢ãžã¥ãŒã«ã®cssãã¡ã€ã«ãã³ããŒããŠãããžã§ã¯ãã«è²Œãä»ãããããã«.module.cssãè¿œå ããå¿ èŠããããŸã
å¥ã®äŸã瀺ããŸãã
ããã±ãŒãžpdf-viewer-reactjs
ããã®äŸåé¢ä¿ã«ã¯CSSãå¿
èŠã§ãããCSSã_app.js
ããã€ã³ããŒãããå¿
èŠããããŸãã
ããã¯ã¢ããªå šäœã®CSSãè¥å€§åãããŠããããã®æ®µéã§ã®ç«¶åã«ã€ããŠã¯ããããããŸããã
import'react-quill / dist / quill.snow.css ';
import'react-image-crop / dist / ReactCrop.css ';
import '../../ node_modules / material-design-icons / iconfont / material-icons.css';
import '../../ node_modules / bulma / css / bulma.css';
import '../../ node_modules / bulma-helpers / css / bulma-helpers.min.css';
ããã«ã以äžãã³ã³ãœãŒã«ã«åºåãããŸãã
èŠå-./node_modules/material-design-icons/iconfont/material-icons.css
node_moduleså ããã°ããŒãã«CSSãã€ã³ããŒãããããšã¯ã§ããŸããã
ç¶ããèªãïŒ https ïŒ
å ŽæïŒnode_modules / pdf-viewer-reactjs / dist / pdf-viewer-reactjs.js
./node_modules/bulma/css/bulma.css
node_moduleså ããã°ããŒãã«CSSãã€ã³ããŒãããããšã¯ã§ããŸããã
ç¶ããèªãïŒ https ïŒ
å ŽæïŒnode_modules / pdf-viewer-reactjs / dist / pdf-viewer-reactjs.js
./node_modules/bulma-helpers/css/bulma-helpers.min.css
node_moduleså ããã°ããŒãã«CSSãã€ã³ããŒãããããšã¯ã§ããŸããã
ç¶ããèªãïŒ https ïŒ
å ŽæïŒnode_modules / pdf-viewer-reactjs / dist / pdf-viewer-reactjs.js
./node_modules/material-design-icons/iconfont/material-icons.css
ã¢ãžã¥ãŒã«ã®ãã«ãã«å€±æããŸããïŒãšã©ãŒïŒãã¡ã€ãã«ããŒããŒïŒ./node_modules/next/dist/build/webpack/loaders/error-loader.jsïŒããããã¡ãŒãŸãã¯æååãè¿ããŸããã§ãã
./node_modules/bulma/css/bulma.css
ã¢ãžã¥ãŒã«ã®ãã«ãã«å€±æããŸããïŒãšã©ãŒïŒãã¡ã€ãã«ããŒããŒïŒ./node_modules/next/dist/build/webpack/loaders/error-loader.jsïŒããããã¡ãŒãŸãã¯æååãè¿ããŸããã§ãã./node_modules/bulma-helpers/css/bulma-helpers.min.css
ã¢ãžã¥ãŒã«ã®ãã«ãã«å€±æããŸããïŒãšã©ãŒïŒãã¡ã€ãã«ããŒããŒïŒ./node_modules/next/dist/build/webpack/loaders/error-loader.jsïŒããããã¡ãŒãŸãã¯æååãè¿ããŸããã§ãã
ããã«ã¡ã¯ ïŒ èª°ãããããã©ã®ããã«è§£æ±ºããŸãããïŒ ãã®ããã«ã€ã³ããŒãã§ããªãããŒãã¢ãžã¥ãŒã«ãå€ãããŸãã
NextJSã®ãã¹ããã©ã¯ãã£ã¹/æèŠããã®éžè±ãæžå¿µãããå Žåã¯ãã³ã³ããŒãã³ãã§ã°ããŒãã«ã¹ã¿ã€ã«ã䜿çšããããšãã next.config.js
ãä»ããŠã¢ã¯ãã£ãåããããã°ããŒãã«ã¹ã¿ã€ã«ã«å¯Ÿããéãã³ã³ãœãŒã«èŠåã衚瀺ããããšãã§ããŸãã
ãã ããããã¯CRA> NextJSããå€æãããŠãŒã¶ãŒã«ãšã£ãŠéèŠã§ãã ããã¯ç§ãã¡ã«ãšã£ãŠãããã«ãŒã§ãb / cåãæ¿ããŠãCSSã¢ãžã¥ãŒã«ã®ãããªãã®ã段éçã«æ¡çšããããšã¯ã§ããŸããã
ãŸã ãããåé¿ããããšã¯ã§ããŸããã ç§èªèº«ã®ããŒãºã®ããã«ãã«ã¹ã¿ã CSSãã³ãã©ãŒã䜿çšããŸããããããã«ããçµã¿èŸŒã¿ã®CSSãµããŒããç¡å¹ã«ãªããŸããããã¹ãŠã®å Žåã«é©ãããœãªã¥ãŒã·ã§ã³ã§ã¯ãªãå¯èœæ§ããããŸãã 以äžã¯ãå§ãã§ããŸãããããã±ãŒãžã®äœæè ãæŽçãããŸã§ã®ã¿äœ¿çšããŠãã ããã
next.config.js
const withCSS = require('@zeit/next-css');
const withPlugins = require('next-compose-plugins');
..ã
module.exports = withPlugins([
..ã
withCSS,
]);
@ abdelrahmantoptal 's SASSã§ãããæ©èœãããæ¹æ³ãç¥ã£ãŠããŸããïŒ
CSSã§æ©èœããããã§ãããSASSã€ã³ããŒããçºçãããšãšã©ãŒãçºçããŸãã
error - ./src/components/layouts/Footer.scss 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> <strong i="8">@import</strong> 'styles/vars';
|
| footer {
ããã§ãwithCSSãã©ã°ã€ã³ã䜿çšããåã«ãSASSããŒããŒãwebpackæ§æã«è¿œå ããŠã¿
config.module.rules.push({
test: /\.s[ac]ss$/i,
use: [
// Creates `style` nodes from JS strings
'style-loader',
// Translates CSS into CommonJS
'css-loader',
// Compiles Sass to CSS
'sass-loader'
]
});
ããããããã¯åå ã§ãïŒ
error - ./src/components/App.scss
ReferenceError: self is not defined
@zeit/next-sass
ã«çœ®ãæããŠã¿ãŸããããåããšã©ãŒãçºçããŸããã
error - ./src/components/App.scss
ReferenceError: self is not defined
SASSã䜿çšããããã«ã³ãŒãã埮調æŽããæ¹æ³ã«é¢ããææ¡ã¯ãããŸããïŒ
誰ããããŸããŸhttps://github.com/balena-io-modules/renditionãæ£åžžã«å®è£ ããŸãããïŒ
ç§ã¯ä»ãã®ã£ãããŒãšããã«Next.jsãæšãŠãŸãããããã¯ããã®ãããªå°ãããªãããéåžžã«ãããã¯ããããæèŠã®åãããæ©èœã®ããã§ãã ãã®ãšã©ãŒãåé¿ã§ããªããããCKEditor 5ã®CodeBlock
ãã©ã°ã€ã³ã䜿çšã§ããªããªããŸããã ãããã®æ§æãäžžã§å²ãæ¹æ³ã¯åžžã«ããã¯ãã§ãã
ãã®åé¡ã«ã€ããŠã@ TimerãŸãã¯
åæããŸããïŒ ããŒãã¢ãžã¥ãŒã«ã«cssãããããšã¯éåžžã«äžè¬çã§ãã éçºè ãšããŠãç§ã¯ä»ã®éçºè ãããŒãã¢ãžã¥ãŒã«ãã©ã®ããã«æ§æããããå¶åŸ¡ã§ããŸããããŸããä»ã®éçºè ã¯ãcssãããŒãã¢ãžã¥ãŒã«ã«å ¥ãããšWebãã¬ãŒã ã¯ãŒã¯ãå£ãããšã¯æã£ãŠããŸããã
@OssiPesonenããã¯ããšããããŸããïŒ ãã®åé¿çã¯çæ³çã§ã¯ãããŸãããããããŸã§ã®éãåé¡ã¯è§£æ±ºããŸããã
@OssiPesonenããã¯ããšããããŸããïŒ ãã®åé¿çã¯çæ³çã§ã¯ãããŸãããããããŸã§ã®éãåé¡ã¯è§£æ±ºããŸããã
ãããã©ã®ããã«åœ¹ç«ã€ãããããŸãããïŒ åé¡ã¯ãããŒãã¢ãžã¥ãŒã«ããããã€ãã®CSSãã¡ã€ã«ãæåã§ã€ã³ããŒãããå¿ èŠãããããšã§ã¯ãããŸããã åé¡ã¯ãCSSã€ã³ããŒããå®è¡ããnpmããã±ãŒãžèªäœã§ãã 次ã®ãããªè¡ãå«ãããã±ãŒãžïŒ
import '../theme/stylesheet.css'
next.jsã埩è®ã§ã¯ã©ãã·ã¥ããŸãã ãããŠæããã«ãã¡ã³ããã®ã¢ããã€ã¹ã¯æ¬¡ã®ãšããã§ãã
ã¡ã³ããã«é£çµ¡ããŠãäŸåé¢ä¿ã®ã³ã³ãã€ã«æžã¿ããŒãžã§ã³ãå ¬éããããã«äŸé ŒããŠãã ããã
ã¡ã³ããã«é£çµ¡ããŠãããã±ãŒãžãéåžžã«éãããŒã¹ã§åã³ã³ãã€ã«ããããã«äŸé Œã§ãããšæ³åããŠãã人ã ã¯ãã©ã®ãããªãã¡ã³ã¿ãžãŒã©ã³ãã«äœãã§ããŸããïŒ ããã¯äœé±éã誰ã«ãéªéãããŸãïŒ ãã®ãã±ããã¯4ã¶æééããŠããŸãã åãã®éããããžã§ã¯ãã§äœæ¥ããå Žåãããã¯åãå ¥ããããŸããã
æ¥é±ïŒã«ããªã¢ïŒä»¥å
ã«ãCSSãnode_modules
ããä»»æã®ã³ã³ããŒãã³ããã¡ã€ã«ã«ã€ã³ããŒãã§ããããã«ãªããŸãã ãã¹ãã®æºåãã§ããããããã«æçš¿ããŸãã
ãªãªãŒã¹åã«èª°ãããããå¿
èŠãšããŠããå Žåã¯ã next-transpile-modulesãã©ã°ã€ã³ã䜿çšããŠãCSSãã€ã³ããŒãããŠããnode_modules
ããã¢ãžã¥ãŒã«ããã©ã³ã¹ãã€ã«ããããšãã§ããŸããã ç§ã«ãšã£ãŠé
åã®ããã«åããã
@BrandonEã¯ãnext-transpile-modulesã«*.module.css
ãšããååã®ã¢ãžã¥ãŒã«ããŸã å¿
èŠãªããã§ãã ãããåé¿ããæ¹æ³ãèŠã€ããŸãããïŒ
@rjoaopereiraãããã©ã®ããã«æ©èœããããæ·±ãç解ããŠãããšã¯èšããŸããããCSSãã€ã³ããŒãããnode_modules
ã»ãšãã©ã¯ã @zeit/next-css
ãã©ã°ã€ã³ã§ã®ã¿æ©èœããŸããã 1ã€ã ããããã§ã¯ãªãããã®æç¹ã§ãã©ã³ã¹ãã€ã«ã«ãã£ãŠåé¡ãä¿®æ£ãããŸããã ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãšã¯ã»ã©é ãã§ããNext.jsã®å°æ¥ã®ããŒãžã§ã³ã§ãBabel / Webpackã®é¬éè¡ã«è²»ããæéãæžãããWebã¢ããªã±ãŒã·ã§ã³ã®äœæã«å€ãã®æéãè²»ãããããã«ãªãããšãé¡ã£ãŠããŸãã
ç§ã¯ããã次ã®å€æŽã§ã»ãŒæ©èœãããŸããã
次ã®9.5.3
next-transpile-modules 4.1.0
ææ
ã蟌ãããã¡ãŒã¹ãããŒãã£ã®ã³ã³ããŒãã³ãã
cssã¢ãžã¥ãŒã«ãšã°ããŒãã«cssãæ··åšãããµãŒãããŒãã£ã³ã³ããŒãã³ã
scopedcomponents
ã¯ã䜿çšãããŠãããµãŒãããŒãã£ã®ã³ã³ããŒãã³ãã«çœ®ãæããããŸã
//next.config.js
const withCustomWebpack = require("./webpack-custom.config");
const withNextCSSOverride = require("./next.config.css");
const withTM = require("next-transpile-modules")(["@scopedcomponents"]);
module.exports = withCustomWebpack(
withTM(
withNextCSSOverride({
poweredByHeader: false
})
)
);
///next.config.css.js
const {
getCssModuleLocalIdent
} = require("next/dist/build/webpack/config/blocks/css/loaders/getCssModuleLocalIdent");
const path = require("path");
/**
* Stolen from https://stackoverflow.com/questions/10776600/testing-for-equality-of-regular-expressions
*/
const regexEqual = (x, y) => {
return (
x instanceof RegExp &&
y instanceof RegExp &&
x.source === y.source &&
x.global === y.global &&
x.ignoreCase === y.ignoreCase &&
x.multiline === y.multiline
);
};
module.exports = (nextConfig = {}) => {
return Object.assign({}, nextConfig, {
webpack(config, options) {
const nextCssLoaders = config.module.rules.find(
rule => typeof rule.oneOf === "object"
);
if (nextCssLoaders) {
const nextCssLoader = nextCssLoaders.oneOf.find(
rule =>
rule.sideEffects === false &&
regexEqual(rule.test, /\.module\.css$/)
);
if (nextCssLoader) {
/***********************************************************
* change the rule to match all scopedcomponents css files
***********************************************************/
nextCssLoader.test = /(@scopedcomponents|react\-virtualized)\/.*\.css$/;
const cssLoader = nextCssLoader.use.find(({ loader }) =>
loader.includes("css-loader")
);
if (cssLoader) {
/***********************************************************
* Override the default behaviour for CSS modules discovery
* auto = true makes webpack search for *.module.css
* https://webpack.js.org/loaders/css-loader/#auto
***********************************************************/
cssLoader.options.modules.auto = /@scopedcomponents\/.*\.css$/;
/***********************************************************
* Nextjs overrides the default mode to "Pure"
* https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack/config/blocks/css/loaders/modules.ts#L35
* Put it back to normal
***********************************************************/
cssLoader.options.modules.mode = "local";
/***********************************************************************************************************************
* There is a problem when using components built with css-modules with Nextjs. *
* NextJS will consume code from `lib` on the server side and from `es` on the client. *
* https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack-config.ts#L374 *
* This raises a problem when generating the classes for different environments, *
* throwing an error of className mismatch due to the hash created being based on the file path *
* https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack/config/blocks/css/loaders/modules.ts#L26 *
* https://github.com/webpack/loader-utils/blob/v1.4.0/lib/interpolateName.js#L39 *
* To solve this, when generating the classNames for 3rd party components, *
* we need to tell cssloader to always use the same path * *
* *
* https://github.com/zeit/next-plugins/issues/595 *
***********************************************************************************************************************/
cssLoader.options.modules.getLocalIdent = (
context,
localIdentName,
localName,
options
) => {
const newContext = { ...context };
if (newContext.resourcePath.includes("@scopedcomponents")) {
newContext.resourcePath = newContext.resourcePath.replace(
`${path.sep}es${path.sep}`,
`${path.sep}lib${path.sep}`
);
}
return getCssModuleLocalIdent(
newContext,
localIdentName,
localName,
options
);
};
}
}
}
if (typeof nextConfig.webpack === "function") {
return nextConfig.webpack(config, options);
}
return config;
}
});
};
åé¡ïŒ
@Timerããã«é¢ããæŽæ°ã¯ãããŸããïŒ
æ¥é±ïŒã«ããªã¢ïŒä»¥å ã«ãCSSã
node_modules
ããä»»æã®ã³ã³ããŒãã³ããã¡ã€ã«ã«ã€ã³ããŒãã§ããããã«ãªããŸãã ãã¹ãã®æºåãã§ããããããã«æçš¿ããŸãã
ãã®ä¿®æ£åŸãã³ã³ããŒãã³ãããCSSãåçã«ã€ã³ããŒããããŸããïŒ
ã©ããããããšã@Timer
next@^9.5.4-canary.10
ã§ãã¢ããªã±ãŒã·ã§ã³ã®ã©ãããã§ãnode_modules
ããã°ããŒãã«CSSãã€ã³ããŒãã§ããããã«ãªããŸããã ããã«ãããCSSãã€ã³ããŒãããå¿
èŠããããµãŒãããŒãã£ã®Reactã©ã€ãã©ãªãšã®çžäºéçšæ§ãåäžããŸãããã¢ããªã±ãŒã·ã§ã³å
šäœã®ãã³ãã«ãµã€ãºã倧ãããªãããšã¯æãŸãããããŸããã
@Timerãã®ãªãªãŒã¹ãåŸ ã¡ãããŸãããããªãã®ä»äºã«æ¬åœã«æè¬ããŠããŸãð¯â€ïž
ããããšã@ã¿ã€ããŒïŒ
ããã¯çŸåšç§ã«ãšã£ãŠããããã³ã°ã®åé¡ã§ãããä»æ¥ããããã¹ããããšãããåããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸããã åã«9.5.4-canary-10ã«ã¢ããã°ã¬ãŒããã以å€ã«äœããããŸããïŒ ãã®äŸã§ã¯ããµãŒãããŒãã£ã®lib @ rmwcã䜿çšããããšããŠããŸã
@johmike次ã®æ§æã䜿çšããŠã€ã³ããŒãããŠããŸããïŒ
import "@rmwc/avatar/avatar.css";
next
ã®ææ°ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããåŸãéçºãµãŒããŒãåèµ·åããããšããŸãããïŒ
@Timerãã®æ©èœãnode_modules
ãã©ã«ããŒããCSSãã¡ã€ã«ãã€ã³ããŒãããã®ã«æé©ã§ãã
import 'prism-themes/themes/prism-darcula.css';
node_modules
ãã£ã¬ã¯ããªå€ã®ã°ããŒãã«CSSã®ã€ã³ããŒãããµããŒãããèšç»ã¯ãããŸããïŒ
@sasivarnan
ããã¯ã @ rmwcã³ã³ããŒãã³ããã€ã³ããŒãããŠããå¥ã®ã©ã€ãã©ãªããã®@require("@rmwc/avatar/avatar.css")
ãŸãã import {Avatar} from "library/Avatar"
ãã€ã³ããŒãããŠããŸããã倱æããŠããŸãã
@sasivarnan
ããã¯ã @ rmwcã³ã³ããŒãã³ããã€ã³ããŒãããŠããå¥ã®ã©ã€ãã©ãªããã®
@require("@rmwc/avatar/avatar.css")
ãŸããimport {Avatar} from "library/Avatar"
ãã€ã³ããŒãããŠããŸããã倱æããŠããŸãã
ãšã£ãã ã¢ããªã±ãŒã·ã§ã³ã«çŽæ¥ã€ã³ããŒãããããšæããŸããã ç§ã®æªãã
ããã§ã®ã³ã¡ã³ãããå€æãããšãããã¯å®éã«ã¯è§£æ±ºãããŠããªããã解決ãããŠããŸãããããã®å€ãã®äººã
ã¯å¥ã®åé¡ãå ±åããŠããŸãã å€ãã®äººã¯ãŸã ã¢ãžã¥ãŒã«ãã€ã³ããŒãã§ããŸãããã¢ãžã¥ãŒã«ã¯ããã±ãŒãžèªäœããCSSãã€ã³ããŒãããŸãïŒããã±ãŒãžãã¡ã€ã«å
ã®import style.css
ã¹ããŒãã¡ã³ãïŒã
ãã®ä¿®æ£ã«ãããã¢ããªã¯node_modules/
ãã¹ããCSSãã€ã³ããŒãã§ããããã«ãªããŸããããããåé¿ããéåžžã«ç°¡åãªæ¹æ³ããããŸããä¿®æ£ããããŸã§ãä»ã®ãšããCSSãã¢ããªã«ã³ããŒããã ãã§ãã ãããã«ãŒã¬ãã«ã®åé¡ã§ã¯ãããŸããã ãããã£ãŠãç°¡åãªè§£æ±ºçããªããããã«ãŒã®åé¡ã¯å®éã«ã¯è§£æ±ºãããŸããã§ããã importã¹ããŒãã¡ã³ããå«ãã³ã³ããŒãã³ããããã±ãŒãžèªäœã«å«ãŸããŠããCSSãã¡ã€ã«ã«ã€ã³ããŒããããšãã¢ããªãã¯ã©ãã·ã¥ããŸãã
@sasivarnan @OssiPesonenããªãã¯äž¡æ¹ãšãããã®OPã®åé¡ã§è°è«ããä¿®æ£ãããŠãããã®ãšã¯ç°ãªãåé¡ã«ã€ããŠè©±ããŠããããã§ãã
ããã«ãããCSSãã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãããå¿ èŠãããã©ã€ãã©ãªãå ·äœçã«ä¿®æ£ãããŸãã次ã«äŸã瀺ããŸãã
// components/MySlider.tsx
import { Slider } from "@reach/slider";
import "@reach/slider/styles.css";
function Example() {
return <Slider min={0} max={200} step={10} />;
}
ããªãã話ããŠããã®ã¯ãïŒ706ãšïŒ13282ã®è€è£œããŸãã¯node_modules
ããã¡ãŒã¹ãããŒãã£ã®ã³ãŒãã®ããã«æ±ãæ©èœã§ãã
@Timeräºæ³ããããŠãŒã¹ã±ãŒã¹ããã¹ããããšãããå®éã«æ£åžžã«æ©èœããŸãã
次ã®æ§é ã®äžéšãšããŠã³ã³ããŒãã³ãã«cssãçŽæ¥ã€ã³ããŒããããšãæåŸ
ã©ããã«æ©èœãããšã©ãŒã¯çºçããŸããã
ãã ãããã®ã³ã³ããŒãã³ãã次ã®æ§é ã®å€éšã®å¥ã®ããã±ãŒãžã«ç§»åãããã«ãããŠãããã®ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšã以åãšåããšã©ãŒã«ãã§ã€ã«ããã¯ããŸãã
ãã®äŸã§ã¯Avatar
ã³ã³ããŒãã³ãã䜿çšããŠããªããããäœãä»ã®ããšãèµ·ãã£ãŠããå¯èœæ§ããããŸãã Button
ãã€ã³ããŒãããŠããŸããã Avatar
ã¯å€±æãšã©ãŒã§ãã
ãŸããã¢ãã¬ãããäœæ¥ããŠããã®ã§next-transpile-modules
ãè¿œå ããŸããããããã¯ãã®ç¹å®ã®åé¡ã解決ããããã«ã¯èŠããŸããã§ããã
next-transpile-modules
åšãã®ä»ã®åé¡ã®æãæãäžããŠãå¥åŠãªèšå®ãã¡ã€ã«ã§ãããæ©èœãããŸããã
const withCSS = require("@zeit/next-css");
module.exports = withCSS();
require.extensions[".css"] = () => {
return;
};
next-transpile-modules
ãåé€ããŸããããããã¯æ©èœããŸãã ã©ãããŠãªã®ãããããªããã©ãäœãããŠã¯ãããªãã¿ããïŒ
話ãæ©ãããïŒ ããã¯next dev
ã next build
ã¯ãCSSãã¡ã€ã«ã®1ã€ããã®unknown token .
ïŒãããïŒãšã©ãŒã§å€±æããŸãã
@ã¿ã€ããŒäœãèãã¯ãããŸããïŒ ããã¯ãã¢ãã¬ããšè€æ°ã®ããã±ãŒãžã§ããã«æ©èœããå¿ èŠããããŸããïŒ ãŸãã¯ã@ team / packageAãnode_modulesããcssãã€ã³ããŒãããŠããã@ team / packageBã«ã€ã³ããŒãã§ããããã«æ§æããå¿ èŠããããã®ã¯ä»ã«ãããŸããïŒ
ãã®åäœã«ã€ããŠã¯ã httpsïŒ//github.com/vercel/next.js/issues/13282ããã©ããŒã§ããŸãã
[email protected]ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®ã©ãã«ã§ãcssãã€ã³ããŒãã§ããŸãã ããããscssãã¡ã€ã«ã§ãåãããšãå¯èœã§ããããïŒ ããŒãžã§å®éã«äœ¿çšããŠããscssãã¡ã€ã«ã®ã¿ãã€ã³ããŒãããããšæã
//ããŒãž/_app.tsx
import '../styles/common.scss'
// pages /index.tsxãã¿ã³ã䜿çšããŸãimport '@mynpm/custom-ui/_Button.scss'
// pages /about.tsxã«ã«ãŒã»ã«ã䜿çšããŸãimport '@mynpm/custom-ui/_Carousel.scss'
https://nextjs.org/docs/basic-features/built-in-css-supportã®äŸ
ãšã©ãŒãè¿ããŸãïŒ
ãšã©ãŒ-/Users/gp/dev/next-kolumbus/node_modules/@reach/dialog/styles.css
node_moduleså
ããã°ããŒãã«CSSãã€ã³ããŒãããããšã¯ã§ããŸããã
ç¶ããèªãïŒ https ïŒ
https://nextjs.org/docs/basic-features/built-in-css-supportã®äŸ
ãšã©ãŒãè¿ããŸãïŒ
ãšã©ãŒ-/Users/gp/dev/next-kolumbus/node_modules/@reach/dialog/styles.css
node_moduleså ããã°ããŒãã«CSSãã€ã³ããŒãããããšã¯ã§ããŸããã
ç¶ããèªãïŒ https ïŒ
Next.jsã®ææ°ããŒãžã§ã³ã䜿çšããŠããããšã確èªããŠãã ããã
ç³ãèš³ãããŸããããåã®ã³ã¡ã³ãã§æå®ããŠããŸããã ããŒãžã§ã³9.5.5ã䜿çšããŸããã npmããæŽæ°ãããŸããã
ãã¹ãŠã®.nextãã£ãã·ã¥ãã¯ãªã¢ããŸããããæåŸ ã©ããã«æ©èœããããã«ãªããŸããã
ãšã©ãŒã¯ãŸã ããŒãžã§ã³9.5.5ã§ã _app
-> import "react-gauge-chart-nextjs-support/dist/GaugeChart/style.css";
æãåèã«ãªãã³ã¡ã³ã
æ¥é±ïŒã«ããªã¢ïŒä»¥å ã«ãCSSã
node_modules
ããä»»æã®ã³ã³ããŒãã³ããã¡ã€ã«ã«ã€ã³ããŒãã§ããããã«ãªããŸãã ãã¹ãã®æºåãã§ããããããã«æçš¿ããŸãã