μ κ° μκ³ μλ μ€λ³΅ λ¬Έμ μ§λ§ μλμ μΌλ‘ μ΄ λ¬Έμ λ₯Ό μ΄μμ΅λλ€. λ΄κ° next.js μμ©κ΅¬(redux, redux-saga, ... ν¬ν¨)λ₯Ό μ€μ νλ λ° 3μΌμ΄ κ±Έλ¦¬κ³ μΈλΆ CSS λ° scss νμΌμ λ‘λνλ μ€μ μ κ°ν μ§ μ΄νμ΄ λμμ΅λλ€. with-global-stylesheet λ° with-scoped-stylesheet-and-postcss μμ λ₯Ό νμΈνμ§λ§ κ°κ° μ΄μ λ¬Έμ μμ μΈκΈν μ£Όμ λ¬Έμ κ° μμ΅λλ€. ν΄νΉμΌλ‘ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ κ³΅κ° λ° νμ λ¬Έμ λ₯Ό λ무 λ§μ΄ λ΄€μ΅λλ€... μ΅μμ μ루μ μ μ°ΎκΈ° μν΄ λ¬Έμ λ₯Ό λ°©μΉνλ λμ λ λμ μ루μ μ μ°Ύμ λκΉμ§ νμ¬ μ¬μ© κ°λ₯ν μ루μ μΌλ‘ ν΄κ²°νλ κ²μ΄ μ’μ μκ°μ΄λΌκ³ μκ°ν©λλ€. λ§μ μ¬λλ€μ΄ μ§κΈ μ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μκ³ μ§κΈ ν΄κ²°λκΈ°λ₯Ό μνκΈ° λλ¬Έμ λλ€!
λλ styled-jsxλ§μ΄ κΉ¨λν(ν« λ¦¬λ‘λ© ν¬ν¨) μ§μμ κ°μ§κ³ μλ€λ κ²μ λμν©λλ€. μ΄κ²μ΄ μ κ° λΉ λ₯Έ νλ‘ν νμ΄νμ΄ νμν λλ₯Ό μ μΈνκ³ λ Next.jsλ₯Ό μ¬μ©νμ§ λͺ»νκ² νλ μ΄μ μ λλ€.
CSS λͺ¨λμ CSS λ²μ μ§μ λ¬Έμ μ λν μ루μ
μ ν¨μ¬ λ κΉλν κ²μ΄λ©° CSS λͺ¨λμ μ¬μ©νλ©΄ μ¬μ ν ν΄λμ€λ₯Ό μμ κ΅¬μ± μμμ μ λ¬ν μ μμ΅λλ€( babel-plugin-inline-react-svg
κ°μ Έμ¨ SVGμ λΉμ μ ν΄λμ€λ₯Ό λ£μ΄λ³΄μμμ€. styled-jsx μ¬μ©).
κ·Έλ¦¬κ³ μ λ νμ€νλ .css
νμΌμ μ¬μ©νμ¬ κ°λ₯ν ν νλ μμν¬ λ½μΈμ λ°©μ§νκ³ μΊμ±μ μν΄ νλ‘λμ
μμ μΈλΆ CSS νμΌμ μ¬μ©νλ κ²μ μ νΈν©λλ€. μ¬μ ν IE8μ μ§μν΄μΌ ν¨).
μμ²λ +1
μΈλΆ css/scssμ κ°μ λ¨μν κ²μ next.jsλ‘ λ¬μ±νλ κ²μ΄ κ±°μ λΆκ°λ₯νμ¬ λ΄ μ ν리μΌμ΄μ
μ 90%μμ μΈλͺ¨μκ² λλ€λ κ²μ ν° μ’μ μ
λλ€.
μ λ λΆνΈμ€νΈλ©μΌλ‘ μμ νκ³ μμΌλ©° μΈλΆ λ²μ CSSλ₯Ό μΆκ°νμ¬ νλμ κΈλ‘λ² λΆνΈμ€νΈλ© CSS κ°μ Έμ€κΈ°κ° μλ ꡬμ±μ΄ νμν©λλ€.
μ€νμΌμ΄ μ§μ λ jsx 1( μ»΄νμΌ μ²λ¦¬λ₯Ό μν webpack )μ μ¬μ©νμ¬ μΈλΆ μ€νμΌλ¬μ€λ₯Ό μλνλ λ° μ±κ³΅νμ§λ§ λ³λμ CSS νμΌμ μ²λ¦¬νλ λ³κ²½ μ¬νμ΄ λμ
λ μ΄νλ‘ μ€νμΌμ΄ μ§μ λ jsx 2μμ μ΄λ₯Ό νμ
νλ λ° μ΄λ €μμ κ²ͺμμ΅λλ€.
νμ¬ μ κ·Ό λ°©μ:
import ComponentStyles from './footer.styl';
...
<style jsx>
{ComponentStyles}
</style>
https://github.com/zeit/next.js/tree/master/examples/with-styled-jsx-scss κ° μΈλΆ scss νμΌλ‘ μμ νλ κ²μ 보λ κ²μ΄ μ’μ κ²μ λλ€.
νκ²½μ ꡬμΆν λλ κ°μ μλ ¨μ κ²ͺμμ΅λλ€.
κ²°κ΅ μ°λ¦¬λ Lost-Gridκ° μλ scss+post CSSκ° μλ μ μ μ€νμΌμνΈλ‘ ν΄κ²°νμ΅λλ€.
ν« λ¦¬λ‘λ©μ΄ μλνλ―λ‘ μ΄μμ μΈ μ루μ
μ μλμ§λ§(μ 체 μ€νμΌμνΈκ° ν λ²μ λͺ¨λ λ‘λλκΈ° λλ¬Έμ) μ μ ν μ μΆ©μμ
λλ€.
μ’ μμ±
"autoprefixer": "^7.1.6",
"babel-plugin-module-resolver": "^2.7.1",
"babel-plugin-wrap-in-js": "^1.1.1",
"node-sass": "^4.5.3",
"sass-loader": "^6.0.6",
"pixrem": "^4.0.1",
"postcss-easy-import": "^3.0.0",
"postcss-loader": "^2.0.8"
package.json
...
"postcss": {
"plugins": {
"lost": {},
"postcss-easy-import": {
"prefix": "_"
},
"autoprefixer": {},
"pixrem": {}
}
}
...
next.config.js
webpack: (config, { dev }) => {
config.module.rules.push(
{
test: /\.(css|scss)/,
loader: 'emit-file-loader',
options: {
name: 'dist/[path][name].[ext]'
}
}
,
{
test: /\.css$/,
use: ['babel-loader', 'raw-loader', 'postcss-loader']
}
,
{
test: /\.s(a|c)ss$/,
use: ['babel-loader', 'raw-loader', 'postcss-loader',
{ loader: 'sass-loader',
options: {
includePaths: ['styles', 'node_modules']
.map((d) => path.join(__dirname, d))
.map((g) => glob.sync(g))
.reduce((a, c) => a.concat(c), [])
}
}
]
}
)
return config
}
pages/_document.js
...
import stylesheet from 'styles/main.scss'
...
<Head>
<style dangerouslySetInnerHTML={{ __html: stylesheet }} />
</Head>
...
κ·Έλ° λ€μ /styles/main.scssμμ μμνλ μ€νμΌμ κ΄λ¦¬ν μ μμ΅λλ€.
λμμ΄ λκΈ°λ₯Ό λ°λλλ€.
μ΄ λ κ°μ§ μ€νμΌ μμ ( with-global-stylesheet λ° with-scoped-stylesheets-and-postcss ) κ°κ°μ λν λ΄ λ¬Έμ λ μ€λ μ·μ CSSλ₯Ό μ¬μ©νμ¬ Jest λ° Snapshot ν μ€νΈμ ν΅ν©νκΈ°κ° κ°λ¨νμ§
μ΄ SO λ΅λ³μ μ€λͺ
λ λλ‘ babel-jest
μ μ²λ¦¬κΈ° νμΌμ μ€ννλ κ²μ λμ ν΄νΉμ²λΌ 보μ
λλ€.
Webpackμ μ¬μ©ν΄μΌ νλ with-global-stylesheet λ‘ μΈλΆ CSSλ₯Ό μ»λ κ² κ°μ§λ§ Jestλ₯Ό μ¬μ©νλ €λ©΄ Webpackμ μμ‘΄ν μ μκ³ Babelλ§ μ¬μ©ν μ μμ΅λλ€.
μ΄ κ³΅κ°μ μμ΄λμ΄κ° μλ μ¬λμ΄ μμ΅λκΉ?
λΉμ·ν λ¬Έμ μ μ§λ©΄ν΄ μμ΅λλ€. μ λ nextjsκ° μ²μμ΄κ³ "with-external-scoped-css" μμ κ° μ λλ‘ μλνλλ‘ λ§λ€ μ μμ΅λλ€. λλ‘λ λ΄ CSSκ°λ‘λλκ³ λλ‘λλ‘λλμ§ μμ΅λλ€. λ§μνμ κ²κ³Ό κ°μ λ¬Έμ μΈμ§ λͺ¨λ₯΄κ² μ΅λλ€.
μ΄ λ‘λ https://github.com/coox/styled-jsx-css-loaderμ μΈλΆ μ€νμΌ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
@ilionic κ·νμ μ루μ μ νμΈνμ΅λλ€. λλ¨ν΄! κ³ λ§μ΅λλ€ :)
@arefaslani μ΄ λ¬Έμ κ° μ’ λ£λμλ€κ³ μκ°νμ§ μμ΅λλ€.
HTTP v1μμ μλ§μ CSSλ₯Ό λ‘λνλ κ²μ μ¬μ ν ββλμ°ν μ±λ₯ μΈκΈμ΄λ©°, μ²μ 그리λ μκ°μ κ·Ήμ μΌλ‘ μ¦κ°μν΅λλ€.
μ μ ν μΈλΆ μ€νμΌ μ§μμ ν΅ν΄ CSSλ₯Ό κ°μ Έμ¬ μ μμΌλ©° κ²°κ³Όμ μΌλ‘ μΈλΌμΈμ΄ μλ ...
Also, this suggestion doesn't resolve use cases where a CSS framework like bootstrap needs to be included from node_modules. Including Bootstrap as an inline CSS on every page would be horrible. And would negate the benefits of browser caching, e.t.c
In short, I really don't think this issue can be closed... It's still very much an ongoing problem.
@israelidanny λΆνΈμ€νΈλ©μ λν΄ λ§μνμ λ΄μ©μ μκ³ μμ΅λλ€. μ΄κ²μ μμ μ΄μ μ루μ μ΄ μλλλ€. λΈλΌμ°μ μμ μΊμν μ μλλ‘ λΆνΈμ€νΈλ© νλ μμν¬μ ν΅μ¬ λΆλΆμ μΆμΆνμ¬ CSS νμΌμ λΆλ¦¬ν©λλ€. μ΄μμ μ΄μ§λ μμ§λ§ μλ‘μ΄ css-in-js μ κ·Ό λ°©μμ μΆμ§νκ³ CSS νλ μμν¬μ λν μ’ μμ±μ μ€μ΄λ μ μ²λ¦¬κΈ° λ° CSS νλ μμν¬λ₯Ό λ€λ£¨λ μ΄ μ΄μν¨.
@ilionic λΉμ μ΄ λ§νλ κ²μ μ΄ν΄νμ§λ§ μ¬μ ν - μλ§μ μΈλΌμΈ CSSλ₯Ό μ¬μ©νλ κ²μ μ±λ₯μ μ’μ§ μμ΅λλ€(νΉν 첫 λ²μ§Έ νλ μκΉμ§μ μκ°). λλ μ°λ¦¬κ° κ·Έκ²μ λν΄ ν¬κ² μ΅μ νλ κ½€ λ§μ νλ‘μ νΈλ₯Ό κ°μ§κ³ μμμ΅λλ€.
νΉν μλ² λ λλ§ DOMμ κ°μ§ μ μλ€λ μ¬μ€μ κ°μν λ λͺ¨λ κ²μ μλ κ²μ λΆλλ¬μ΄ μΌμ λλ€.
μ΄ λ¬Έμ λ₯Ό λ«κ³ νΉν μΈλΆ CSSλ₯Ό μ°κ²°ν μ μλ μ루μ
μ μν΄ μ λ¬Έμ λ₯Ό μ¬μκ² μ΅λκΉ?
λΆλͺ
ν λ리 νΌμ§ κ°λ° κ΄νμ 무μνλ κ²μ μ΄μν κ²μ
λλ€.
@israelidanny λ λμν©λλ€. μ°λ¦¬λ μ¬μ ν CSS μ±λ₯μΌλ‘ μ΄λ €μμ κ²ͺκ³ μμΌλ©° μ£Όμ μ¬μμ± μμ΄λ ν΄κ²° λ°©λ²μ΄ λͺ ννμ§ μμΌλ―λ‘ μ€μ λ‘ μ΄ λ¬Έμ κ° λ κΉμ΄μ§λλ€. μλ§λ styled-jsxκ° μ΄ κ²½μ° λ κ΄λ ¨μ±μ΄ λμ repoμ λκΉ?
@ilionic ν , styled-jsx repoκ° ββμΌλ§λ μ¬λ°λ₯Έ μ₯μμΈμ§ λͺ¨λ₯΄κ² μ΅λλ€.
λ¬Έμ λ κ·Έλ€μκ² μλ κ²μ΄ μλλΌ μΈλΆ CSS νμΌμ λν next.js μ§μμ νμ±ννλ κ²μ λλ€. μ΄λ styled-jsxμ κ΄λ ¨μ΄ μμ μλ μκ³ ν¬ν¨λμ§ μμ μλ μμ΅λλ€.
μ΄λ»κ² μκ°νλμ?
@israelidanny μ΅κ³ μ μ루μ μ μλμμ§λ§ μ΄μ¨λ μλν©λλ€. νμ§λ§ λΉμ λ§μ΄ λ§μ. μΊμ± μμ΄ λͺ¨λ νμ΄μ§μ λͺ¨λ CSSλ₯Ό μΈλΌμΈμΌλ‘ λλ κ²μ μ΅μμ μ루μ μ΄ μλλλ€. λν μ΄ λΆλΆμ λν΄μλ λ€μκ³Ό κ°μ΄ λμν©λλ€.
λ¬Έμ λ κ·Έλ€μκ² μλ κ²μ΄ μλλΌ μΈλΆ CSS νμΌμ λν next.js μ§μμ νμ±ννλ κ²μ λλ€. μ΄λ styled-jsxμ κ΄λ ¨μ΄ μμ μλ μκ³ ν¬ν¨λμ§ μμ μλ μμ΅λλ€.
@ilionic κ³Ό μ λμ μΌλ‘ λμνμ§ μμ΅λλ€.
μλ§λ styled-jsxκ° μ΄ κ²½μ° λ κ΄λ ¨μ± μλ μ μ₯μμΌ κ²μ λλ€.
styled-jsx/css loader λ‘ μ루μ μ κ΄λ¦¬νμ΅λλ€. https://github.com/P233/nextjs-with-scss μμ μ½λλ₯Ό λ³Ό μ μμ΅λλ€.
κ·Έλ¬λ @import
ed scss νμΌμ΄ κ°μλμ§ μκ³ ν« λ¦¬λ‘λλ₯Ό νΈλ¦¬κ±°νμ§ μλλ€λ κ²μ μκ² λμ΄ μ λ§ μ§μ¦μ΄ λ¬μ΅λλ€.
μΆμΆλ μ€νμΌμνΈ νμΌμ ν«λ¦¬λ‘λνκΈ° μν΄ https://github.com/sheerun/extracted-loader λ₯Ό λ§λ€μμ΅λλ€. κ°λ° μμλ κ½€ μ μλνλ―λ‘ dangerouslySetInnerHTML
κ° νμνμ§ μμ΅λλ€.
λ€μκ³Ό κ°μ΄ μ¬μ©ν©λλ€.
config.module.rules.push({
test: /\.css$/,
use: ['extracted-loader'].concat(ExtractTextPlugin.extract({
/* Your configuration here */
}))
})
config.plugins.push(new ExtractTextPlugin('index.css'))
@sheerun , κ°μ¬ν©λλ€. νμ§λ§ λ΄ CSSλ₯Ό κ΅¬μ± μμμ μ΄λ»κ² μ½μ ν©λκΉ?
μ£Όμ νμ§ μκ³ ExtractTextPluginμΌλ‘ λͺ¨λ κ²μ μΆμΆνκ³ λ€μμ μμ±ν©λλ€.
<Head>
<link rel='stylesheet' type='text/css' href="/static/index.css" />
</Head>
κ·νμ κ΅¬μ± μμμμ λ€μκ³Ό κ°μ
import './styles.scss'
μΆ©λΆν΄μΌν©λλ€
μ’μ, νμ§λ§ μ΄μ μ€λ₯κ° μμ΅λλ€.
./components/Home/Home.js
λͺ¨λμ μ°Ύμ μ μμ: μ€λ₯: 'D:\Sites\work\VisualProposal'μ 'css-loader'λ₯Ό νμΈν μ μμ΅λλ€.
@ ./components/Home/Home.js 13:0-22
@ ./pages?entry
@ multi ./pages?entry
λ΄ Home.js κ΅¬μ± μμ:
import { observer } from 'mobx-react';
import './Home.scss'
import MainSection from './MainSection/MainSection'
import Sections from './Sections/Sections';
import Features from './Features/Features'
import Pricing from './Pricing/Pricing';
import Footer from './Footer/Footer'
const Home = () => {
return (
<div className="Home">
<MainSection/>
<Sections/>
<Features/>
<Pricing/>
<Footer/>
</div>
)
};
export default observer ( Home );
λ΄ next.config.js:
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
webpack: function ( config, { dev } ) {
config.module.rules.push({
test: /\.(sa|sc|c)ss$/,
use: ['extracted-loader'].concat(ExtractTextPlugin.extract({
use: [
"babel-loader",
{
loader: 'css-loader',
options: {
url: true,
minimize: !dev,
sourceMap: dev,
importLoaders: 2
}
},
{
loader: 'postcss-loader',
options: {
sourceMap: dev,
plugins: [
require('autoprefixer')({
/* options */
})
]
}
},
{
loader: 'sass-loader',
options: {
sourceMap: dev
}
}
]
}))
});
config.plugins.push(new ExtractTextPlugin('index.css'));
if ( config.resolve.alias ) {
delete config.resolve.alias['react'];
delete config.resolve.alias['react-dom']
}
for (let index = 0; index < config.plugins.length; index += 1) {
if (config.plugins[index].constructor.name === "UglifyJsPlugin") {
config.plugins.splice(index, 1, new UglifyJSPlugin({
sourceMap: true,
parallel: true,
}));
break;
}
}
return config
}
};
κ·Έλμ λ΄κ° λ μλͺ»νκ³ μλ?
SCSS, url() in stylesheet, img[src]λ‘ κ½€ κ³ κΈ μμ λ₯Ό μΆκ°νμ΅λλ€. now.shλ₯Ό μ¬μ©νμ¬ μμμμ μλν΄μΌ νλ©° ν« λ¦¬λ‘λ© λ° λ΄λ³΄λ΄κΈ°κ° μ¬λ°λ₯΄κ² ꡬμ±λμ΄ μμ΅λλ€.
https://github.com/sheerun/extracted-loader/tree/master/examples/with-next
@psycura Windowsλ₯Ό μ¬μ©νλ κ²μ 보λ λ°λ‘ μλνμ§ μμ μ μμ§λ§ μμ PRμ 보λ΄μ£ΌμΈμ.
π μΈλΆ CSS νμΌ μμ μ νμ©νμ§ μλλ€λ μ μ Nextjsμ μμΉμ λλ€. λ΄ νλ‘μ νΈμμ μ¬μ©νκ³ μΆμ μ체 μ€νμΌμνΈκ° ν¬ν¨λ μλ§μ μ¦μ μ¬μ© κ°λ₯ν ν¨ν€μ§κ° μμ΅λλ€. νμ§λ§ λ ν μ μμ΄! λͺ κ°μ§ μ΅μ μ μλνμ§λ§ μ무λ μ€μ λ‘ μλνμ§ μμ΅λλ€. μ΄λ―Έ ν루λ₯Ό 보λμ΅λλ€.
@mkozhukharenko CSS λ° scss νμΌκ³Ό ν¨κ» μλν©λλ€. https://github.com/coox/styled-jsx-css-loader λ₯Ό μ¬μ©νμ¬ μμ λ₯Ό μΆκ°νκ² μ΅λλ€. μΈλΆ CSSλ₯Ό λ²μ μ§μ λλ μ μ styled-jsxλ‘ λ‘λν©λλ€. μΌλ°μ μΈ μ μ scssμ κ²½μ° node-sass λ° postcssλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
@arefaslani λλ λͺ¨λ μ΅μ μ μλνμ§λ§ μ΄λ μͺ½λ ν¨κ³Όκ° μμμ΅λλ€. μ΄ νλ μμν¬μ μμ ν μ€λ§νμ΅λλ€. μΈμμ κ·Έλ κ² μ¬μ΄ μΌμ΄ μ΄λ»κ² μ΄λ €μΈ μ μμ΅λκΉ? λλ κ·Έλ° λ μ μ μΈ νλ μμν¬λ₯Ό λ€μλ μ¬μ©νμ§ μμ κ²μ λλ€.
@mkozhukharenko μ΄ μλ₯Ό 보μμμ€: https://github.com/arefaslani/next.js/tree/canary/examples/with-external-scoped-scss. κΈ°λ³Έ repo μμ μ μΆκ°νκΈ° μν΄ pull μμ²μ λ§λ€κ³ μμ΅λλ€.
νμΌμ ν¨μ¬ λ λ§μ CSSλ₯Ό μΆκ°νλ €κ³ νλ©΄ styled-jsx
μ²λ¦¬ν μ μλ€λ κ²μ μ μ μμ΅λλ€. 'jsx-undefind'λ₯Ό μ°Ύμ μ μκ±°λ 'jsx-4231512'λ₯Ό μ°Ύμ μ μμ μ€λ₯κ° λ°μν©λλ€.
@arefaslani κ·νμ μμμ μ΄ ν¨ν΄μ μ¬μ©ν μ μλ λ°©λ²μ΄ μμ΅λκΉ?
import classes from './styles.scss'
const MyComponent = () => (
<header className={classes.header}>Hello</header>
)
@protoEvangelion λΆννλ νμ¬λ styled-jsxμμλ§ μλν©λλ€.
μ κ·Έλ κ΅°μ λΉ λ₯Έ λ΅λ³ κ°μ¬ν©λλ€ :)
next.jsμ λΉλκ° μ²μμλ κΈ°μ‘΄ 리μμ€μ μ¬μ¬μ©μ λν΄ μκ°νμ§ μλ κ²μ΄ λΆλλ½μ΅λλ€. CSS νμΌμ λν΄μλ§ λ³΅μ‘ν κ·μΉμ μ€μ νλ λ° μκ° λλΉμ λλ€.
μ λ λͺ¨λ μΉν© λ‘λκ° μλνλλ‘ νμ©νλ μ΄ λ¬Έμ μ λν μ루μ μ κ°λ° μ€μ λλ€.
λλ λν κ°μΈμ μΌλ‘ μ¬λλ€μ΄ μ΄ λ¬Έμ μ λν΄ κ°μ§κ³ μλ μ΄μ‘°λ₯Ό μ’μνμ§ μλλ€λ μ μ μ§μ νκ³ μΆμ΅λλ€.
λλ λΉμ μ΄ CSSλ₯Ό κ°μ Έμ€κ³ μΆμ΄νλ€λ κ²μ μμ ν μ΄ν΄ν©λλ€. κ·Έλ¦¬κ³ μ°λ¦¬λ μ΄ μμ²μ μ μκ³ μμ΅λλ€. κ·Έλμ μ§λ ν μ£Ό λμ μ΅μμ μ루μ
μ μ°ΎκΈ° μν΄ λ
Έλ ₯νμ΅λλ€ π
μ΄κ²μ λν μμΈν λ΄μ©μ 곧. κ·ΈλκΉμ§ μΉμ νκ³ ν볡ν λͺ
μ 보λ΄μΈμ π
π
μλ
νμΈμ μ¬λ¬λΆ, λ€λ₯Έ githubμμ ν΄κ²°μ±
μ μ°Ύμμ΅λλ€.
skeleton-loaderλ₯Ό μ¬μ©νμ¬ CSS λͺ¨λκ³Ό λμΌν ν¨κ³Όλ₯Ό μ»κΈ° μν΄ BEM κ·μΉμ λ°λ₯΄μμμ€.
.scss.jsonμ μμ±ν λ€μ ν΄μ§ν΅μ μ¬μ©νμ¬ μμ±λ .scss.jsonμ μμ ν΄μΌ νκΈ° λλ¬Έμ μ΄μμ μ΄μ§λ μμ§λ§ λ€λ₯Έ λ μ’μ λ°©λ²μ΄ μλμ§ μλ €λλ¦¬κ³ μ ν©λλ€.
Hi, everybody, I found a solution on another github,
Use skeleton-loader to comply with BEM rules to achieve the same effect as css-modules,
Because it will need to generate. Scss.json, then use the trash will be generated. Scss.json delete
Although it feels less than ideal, give it to you to see if there are any other better ways
@timneutkens μ루μ μ μ΄λ»κ² λμ΄κ°κ³ μμ΅λκΉ?
scss, css λ° λ λ§μ κΈ°λ₯ κ°μ Έμ€κΈ°λ₯Ό μ§μνλ Next μμ©κ΅¬λ₯Ό λ§λ€μμ΅λλ€. 보μκ³ λ§μμ λμ
¨λ€λ©΄ λ³μ μ£ΌμΈμ ;)
https://arefaslani.github.io/next-boilerplate
@Bobeta λλ κ·Έκ²μ μλ μμΌ°μ΅λλ€. PRμ μ μΆνκΈ° μ μ μμ νκ³ μΆμ λͺ κ°μ§ μ£μ§ μΌμ΄μ€κ° μμ΅λλ€.
@timneutkens λ°κ° μ΅λλ€! μΈμ μΆνλ κ²μΌλ‘ μμνμλκΉ?
@Bobeta μ΄ μ€λ λκ° κ²μλκ³ μ¬μ©ν μ€λΉκ° λλ©΄ μ΄ μ€λ λμ κ²μν κ²μ΄λΌκ³ νμ ν©λλ€.
@jthegedus κ·Έλ κ·Έλ΄ κ²μ΄λΌκ³ νμ νμ§λ§ μ¬λλ€μ΄ @timneutkensλ₯Ό κΈ°λ°μΌλ‘ κ²°μ ν μ μλλ‘ μΆμ μ λν΄ κΆκΈν©λλ€
κ°μ₯ μ μ©ν λκΈ
λλ λν κ°μΈμ μΌλ‘ μ¬λλ€μ΄ μ΄ λ¬Έμ μ λν΄ κ°μ§κ³ μλ μ΄μ‘°λ₯Ό μ’μνμ§ μλλ€λ μ μ μ§μ νκ³ μΆμ΅λλ€.
λλ λΉμ μ΄ CSSλ₯Ό κ°μ Έμ€κ³ μΆμ΄νλ€λ κ²μ μμ ν μ΄ν΄ν©λλ€. κ·Έλ¦¬κ³ μ°λ¦¬λ μ΄ μμ²μ μ μκ³ μμ΅λλ€. κ·Έλμ μ§λ ν μ£Ό λμ μ΅μμ μ루μ μ μ°ΎκΈ° μν΄ λ Έλ ₯νμ΅λλ€ π
μ΄κ²μ λν μμΈν λ΄μ©μ 곧. κ·ΈλκΉμ§ μΉμ νκ³ ν볡ν λͺ μ 보λ΄μΈμ π π