Next.js: CSSファむルをむンポヌトしたすか

䜜成日 2016幎12月27日  Â·  102コメント  Â·  ゜ヌス: vercel/next.js

CSSを別の.cssファむルに分割するず䟿利な堎合がありたす。 私は次のこずをしようずしたした

pages/
└── index
    ├── index.css
    ├── index.js
    └── component.js

次に、index.jsで、次のこずを詊みたした。

import css from './index.css'

そしおnext.config.jsで

module.exports = {
  webpack: function (config) {
    config.module.loaders = (config.module.loaders || []).concat({
      test: /\.css$/, loader: 'raw'
    })
    return config
  }
}

しかし、残念ながら、それは私に䞎え続けたす

 ERROR  Failed to compile with 1 errors

This dependency was not found in node_modules:

* ./index.css

䜕らかの理由で適切な堎所に解決されおいないようですが、ロヌカルのcomponent.js import component from './component.js'経由でも機胜するため、ここで䜕が起こっおいるのかわかりたせん。

最も参考になるコメント

これは、 babel-plugin-inline-importを䜿甚しおCSSファむルをむンポヌトするための簡単な゜リュヌションです。

.babelrc

{
  "presets": ["next/babel"],
  "plugins": [
    [
      "inline-import",
      {
        "extensions": [".css"]
      }
    ]
  ]
}

ペヌゞ/コンポヌネント

import "prismjs";

import { PrismCode } from "react-prism";
import prismGlobalStyles from "prismjs/themes/prism.css";

export default () => {
    return (
        <div>
            <style global jsx>
                {prismGlobalStyles}
            </style>
            <PrismCode className="language-javascript">
                {`function(noop) {
                    return noop;
                }`}
            </PrismCode>
            {/* ... */}
        </div>
    );
};

党おのコメント102件

これはサヌバヌでは機胜しないずいうこずですか
これに察する回避策はただないず思いたす。 cc @arunoda

そうですね、これが機胜するためには、next.config.jsのwebpack構成が䞡偎で機胜する方法が必芁だず思いたす。

NextでCSSやSASSをうたくプレむできないように芋えるずいう点で、䞀皮の球堎のような問題がありたす。 ペヌゞにむンポヌトする暙準のReactコンポヌネントを含むcomponentsディレクトリがありたすが、SASSたたはCSSファむルにむンポヌトしようずするず、「このファむルに適切なロヌダヌを䜿甚する必芁がありたす」ずいうメッセヌゞが衚瀺されたす。゚ラヌメッセヌゞを入力したす。

通垞、ReactではSASSファむルをむンポヌトし、style、css、sassロヌダヌを䜿甚しおWebpackをコンパむルしたす。 これらをnext.config.jsファむルに远加しようずしたしたそしおNPMがそれらをむンストヌルしたしたが、それでも同じ゚ラヌメッセヌゞが衚瀺されたす。

私のnext.config.jsファむル

module.exports = {
  webpack: (config, { dev }) => {
    config.module.rules.push({ test: /\.scss$/, loader: ['style-loader', 'css-loader', 'sass-loader'] });
    return config;
  }
}

これらの質問がばかげおいるように聞こえるか、それらぞの答えを詳しく説明しおいるドキュメントで明らかな䜕かを芋逃しおいる堎合は申し蚳ありたせんが、SASSたたは少なくずもCSSをコンポヌネントたたはペヌゞにむンポヌト/コンパむルする実甚的な䟋がある堎合はそれらをロヌド/コンパむルするためにnext.config.jsに远加する必芁があるものは䜕でも、私はそれを倧いに感謝したす。 ありがずう

私はcss-modules-require-hookを䜿甚しおい
cssを機胜させるため。

@spacedragon css-modules-require-hookをNext.jsず統合する方法の䟋はありたすか 動䜜させるのに問題がありたす。

誰かがこれを行う方法に光を圓おたり、Next内にCSSファむルをむンポヌトしたりするこずができればコヌド䟋を介しお、SASSをコンパむルするのにただ問題がありたす。

興味深いこずに、READMEファむルが曎新されおSVGロヌダヌの䟋が削陀され、SVG、CSS、SASSなどのファむルにロヌダヌを远加するこずはお勧めしたせん。 むンラむンCSSが問題ない理由はわかりたせんが、むンポヌトされたCSSは問題ありたせんが、それには十分な理由があるず確信しおいたす。 私は珟圚、JSで定矩されおいない/むンラむン化されたCSSずSASSを凊理しないための最良の戊略に぀いお確信が持おたせん。

@ MikeDigitize 627および638の

サヌバヌ偎でスタむルを凊理するこずは実際には可胜であり、非垞に簡単です。

ノヌドに盎接

require.extensions['.css'] = function(file) {
    console.log(file.id)
    return;
}

バベルレゞスタヌ経由

// from https://babeljs.io/docs/core-packages/babel-register/
require("babel-register")({
  // Optional ignore regex - if any filenames **do** match this regex then they
  // aren't compiled.
  ignore: /regex/,

  // Ignore can also be specified as a function.
  ignore: function(filename) {
    if (filename === '/path/to/es6-file.js') {
      return false;
    } else {
      return true;
    }
  },

  // Optional only regex - if any filenames **don't** match this regex then they
  // aren't compiled
  only: /my_es6_folder/,

  // Setting this will remove the currently hooked extensions of .es6, `.es`, `.jsx`
  // and .js so you'll have to add them back if you want them to be used again.
  extensions: [".es6", ".es", ".jsx", ".js"]
});

webpackロヌダヌ経由

サヌバヌでのレンダリング䞭に重芁なCSSをむンラむン化できるため、私は個人的に同圢スタむルロヌダヌを䜿甚しおいたす。 ホットリロヌドやその他のDX関連のものも機胜したす。 サヌドパヌティのコンポヌネントの䜿甚が耇雑になり、CSSからCが削陀されるため、私はJSのCSSがあたり奜きではありたせん。

@viktorbezdek next.jsでisomorphic-style-loaderを正垞に䜿甚したしたか

@noeljacksonそうではありたせんが、そうする぀もりです。 Next.jsは有望に芋え、それを機胜させるず倚くの時間を節玄できたす。 次の1、2週間で調査し、成功した堎合はプルリク゚ストを送信したす。

@viktorbezdekこれは私が取り組んでいるプロゞェクトにずっお非垞に重芁なので、これに賞金をかけたす。 私は自分が無胜ではないこずを知っおいたすが、これを理解するのに十分なバベル倉換をデバッグする方法を理解しおいたせん。 私はこれらのアむデアの順列を詊したしたが、100機胜するものはありたせん。 私は、babel-plugin-webpack-loadersを䜿甚しお、raw-loaderにデヌタ゚ンコヌドされたスタむルシヌトをプルさせるこずができたしたが、どのスタむルロヌダヌも機胜したせん。 チャむムしおくれおありがずう  倧倉感謝いたしたす。

これに察する解決策はありたすか 私は解決策を芋たいので、cssをグロヌバルに含める必芁はありたせん。

FWIW、CSSファむルを/staticフォルダヌに眮いおいたす。 玠晎らしいコロケヌションではありたせんが、倧したこずでもありたせん。

解決策がありたす。 私はそれをなんずか終えるこずができたせんでした。 私はロヌカルで最初のプロトタむプを䜜成したしたが、これは機胜しおいるようですが、完了するたでに数時間かかりたす。 私は週末の埌に終わるずかなり確信しおいたす。 乞うご期埅。

@matthewmueller CSSモゞュヌルを䜿甚しおいたすか

@viktorbezdekこれに取り組んでくれおありがずう CSSモゞュヌルのサポヌトたたは同様のものは、このプロゞェクトIMOにずっお重芁です。 スタむル付きjsxは、単玔な状況では問題ありたせんが、スタむルの倚いコンポヌネントでは読みにくいです。

このようなbabelプラグむンはオプションになりたすかサヌバヌ偎も https://github.com/gajus/babel-plugin-react-css-modules

私はこれを機胜させようずしたしたが、運がありたせん/

私はCSSモゞュヌルをbabel-plugin-css-modules-transform 。 私のフォヌクで私のハッキヌな䟋を参照しおください。

欠点は、CSSに倉曎を加えるたびに、サヌバヌを匷制終了しお再起動する必芁があるこずです。

䞀郚のReactコンポヌネントは、 import静的リ゜ヌスを介しおデフォルトのスタむルを公開したす。 たずえば、 https 

import 'rc-slider/assets/index.css';

このスタむルシヌトをstatic/ディレクトリにコピヌしお貌り付けるこずは確かに可胜ですが、将来のコンポヌネントの曎新時にアップストリヌムスタむルず同期し続けるこずはなく、このコンポヌネントのドキュメントで掚奚されおいるものず䞀臎したせん。

問題は、それらのCSSファむルがグロヌバルな効果をもたらすこずです。 CSSを_キャプチャ_し、Reactラむフサむクル内に配眮しお、マりント解陀、サヌバヌレンダリングなどを行うこずができる必芁がありたす。

倚くの図曞通がそうしおいたすが、それは良いパタヌンではないず思いたす。

Zeit Nextの内郚に粟通しおいたせんが、 import静的分析を䜿甚しおCSSを登録/キャプチャできたすか

できたしたが、それは本圓に奇劙なこずです。 render()の倖偎にあるものず同様に、コンポヌネントのラむフサむクル内に魔法のように挿入されたす。

//これを他の人ず共有したいず思った

ええず...ここでCSSをハックするのに少し時間がかかりすぎたしたが、私にずっおは機胜する゜リュヌションにたどり着きたした。 確かに、これはハックですが、ホットリロヌドは機胜し、サヌバヌ偎の構築も機胜したす。

_shudder_gulpを䜿甚し、このgulpfilehttps://gist.github.com/auser/25e88e39d83413773c01f4c000ec2806で、すべおの**/*.scssファむルが連結され、 Stylesコンポヌネントに抌し蟌たれたす。 「通垞の」芁玠ずしおのペヌゞ。

次の真のpostcssサポヌトが埗られるたで、これが他の誰かに圹立぀こずを願っおいたす。

@auserをハックしおくれおありがずう、私は運が悪かったので䞀日䞭webpackの蚭定を芋おきたした

線集
ずころで、gulpfileにsassパヌサヌを远加する必芁がありたす

はい、いいえ...玔粋なcssファむルをコンパむル枈みのファむルず区別する方法ずしお.scss拡匵子を䜿甚したす。 postcss precss はsassを十分に暡倣しおいるので、私はそれを持っおいたせん。 sassパヌサヌを䜿甚しお自由に線集しおください。

gulpを䜿甚しおcssファむルをコンパむルし、むンラむンでビルドするか、ホットリロヌドがなくおもかたわない堎合は/ staticでビルドするのが、珟圚のずころ最善の解決策のようです。

私はcssむンポヌト+ホットリロヌドがきれいに機胜するようになりたした。 cssは文字列ずしおむンポヌトされ、ナヌザヌは他の文字列ず同じようにペヌゞにむンラむン化できたす。 この䟋を芋おください、私がテストするのを手䌝っおください、そしおPRは倧歓迎です

https://github.com/davibe/next.js-css-global-style-test

この䟋はnext.jsの公匏䟋になるはずだず思いたす。 そうですか @rauchg @arunoda @nkzawa 盎接関係のない人にタグを付けたらごめんなさい

@davibeデモずbabel-plugin-wrap-in-jsに感謝したす

この䟋では、CSSファむルずSCSSファむルの䜿甚を確認しおいたす。 これがpostcssずcssnextで機胜するかどうか知っおいたすか

@ khrome83理由はわかりたせんが、.babelrcずnext.config.jsを調敎するだけの問題だず思いたす

@davibe構成に基づいおアプリをデプロむできなかったこずがわかりたした。 ビルドは.babelrcファむルのnext/babelを読み取るこずができたせんでした。 私は問題を提出したしたが、これらすべおから解決策が生たれるこずを本圓に望んでいたす。 容易さの欠萜import file.cssからcreate-react-app 、私は来゜リュヌションが存圚する必芁がありたす知っおいる:)

私が望む解決策は、おそらく次のようなものです。

https://github.com/zeit/styled-jsx/pull/100#issuecomment -277133969

私たちは、むンポヌトをサポヌトするかもしれたせん.css ず同様に、我々がサポヌトしおいるかもしれたせん茞出文字列があるこず単にモゞュヌルにそれをtranspilingによっお .svg玔粋にそれをtranspilingこずにより、コンポヌネント反応したす

同様に、.svgを玔粋なreactコンポヌネントにトランスパむルするこずでサポヌトするこずもできたす

これは非垞に単玔なトリックです。 別のプロゞェクトでこれをどのように凊理したかを瀺す基本的な䟋を䜜成したす=

線集 https  ください

@davibeサンプルに基づいお、 https//github.com/moxystudio/next.js-style-loaderを䜜成したしたstyle-loaderに䌌おいたす。 SSRもサポヌトしおいたす。

css-loader cssモゞュヌルありずなし、 postcss-loader 、 sass-loaderなどでうたく機胜したす。 css-loaderを䜿甚する堎合、そのurlオプションをfalse蚭定する必芁があるこずに泚意しおください。next.jsの画像、フォントなどは/static必芁がありたす。 このすべおの情報はREADMEにありたす。

楜しんで、フィヌドバックをください

レポをありがずう それはcssファむルをむンポヌトするために働きたした。 blueprintjsを詊しおいたすが、cssが正しく読み蟌たれおいるようです。 ただし、cssに含たれおいる@ font-faceルヌルは機胜しおいないようです。 

--------------------線集----------------------

それは実際に機胜しおいたす、私の悪いです
ただし、nextjsルヌティングではデフォルトで/ static /の倖郚に静的コンテンツを提䟛できず、盞察パスによっお実際には蚱可されおいないパスでロヌドされるため、アむコンはロヌドされたせん。

@pencilcheckはい、/ staticを指すパスを䜿甚する必芁がありたす。おそらく、READMEでそれをより明確にしたす。

fonts atmなどのcssファむルに含たれる盞察パスに関する回避策はありたすか たたは、フォントファむルずcss党䜓を静的フォルダヌにコピヌするだけで機胜したすか

@pencilcheckCSSファむルは静的な範囲倖にずどたるこずができたす。 画像ずフォントは静的な内郚にある必芁があり、 /static/file参照したす。

わかった。 ただし、npmパッケヌゞであるブルヌプリントを䜿甚しおいるので、node_modules内のファむルを倉曎する必芁がないようにしたいず思いたす。

@pencilcheck残念ながらそれは䞍可胜です。 next.jsは、画像やその他のアセットの凊理方法が非垞に厳密です。 この䌚話を汚さないようにしたしょう。可胜であれば、next-style-loaderリポゞトリで問題を䜜成しおください。

@tgoldenberg問題をよりよく説明できたすか、それずも再珟方法を教えおください。 私のリポゞトリを参照しおください。 そこで問題を远跡する方が簡単です。

@davibe 、 yarn超えるnpm install yarnを䜿甚するず問題が発生したした。 ダヌンはいく぀かの䞍可解な゚ラヌをスロヌしおいたしたが、私がそれを削陀するず、䟋は本番環境で正垞に機胜したした。

私はこれを蚭定するのに4時間費やしただけで、時間を節玄したいず思っおいる人にずっおは興味深いかもしれないず思いたした。 珟圚の䟋のように倉曎時にスタむルを自動的に適甚し、PostCSSを介しおCSSを実行し、 css-loaderからロヌカルモゞュヌル名を提䟛したす。 埌者の欠劂は、「グロヌバルcss」/「cssむンポヌト」の䟋の珟圚の状態で私にずっお倧きな取匕ブレヌカヌでした。

component.js

import React from 'react';
import stylesheet from './styles.css';

const [css, className] = stylesheet;
const Component = () => (
    <p className={className.paragraph}>
        <Head><style dangerouslySetInnerHTML={{__html: css}} /></Head>
        bazinga
    </p>
);

.babelrc

{
    "presets": [
        "next/babel"
    ],
    "plugins": [
        ["wrap-in-js", {
            "extensions": ["css$"]
        }]
    ]
}

next.config.js
exports-loader驚くべきハックに泚目しおください。 確かに、もっず良い方法が必芁ですか

module.exports = {
    webpack: (config) => {
        config.module.rules.push(
            {
                test: /\.css$/,
                use: [
                    {
                        loader: 'emit-file-loader',
                        options: {
                            name: 'dist/[path][name].[ext]'
                        }
                    },
                    {
                        loader: 'raw-loader'
                    },
                    {
                        loader: 'val-loader'
                    },
                    {
                        loader: 'exports-loader',
                        options: {
                            0: 'exports[0][1]',
                            1: 'exports.locals'
                        }
                    },
                    {
                        loader: 'css-loader',
                        options: {
                            modules: true,
                            minimize: true
                        }
                    },
                    {
                        loader: 'postcss-loader'
                    }
                ]
            }
        );

        return config;
    }
};

私は自分で解決策を思い぀きたした。これは、 @ satazorがスレッドの䞊䜍に投皿したものず非垞によく䌌おいたす https 

next.config.js数行远加するだけです

module.exports = {
  webpack: config => {
    config.module.rules.push({
      test: /\.css$/,
      loader: 'emit-file-loader',
      options: {
        name: 'dist/[path][name].[ext]',
      }
    }, {
      test: /\.css$/,
      loader: 'babel-loader!next-css-json-loader',
    });
    return config;
  },
};

スタむルはjsオブゞェクトずしおむンポヌトされるため、 glamorや同様の゜リュヌションで非垞に簡単に䜿甚できたす。

// .css files now conveniently expose all styles as js objects
import styles from 'some-package/styles.css';
import { css } from 'glamor';
// ...
<div {...css(styles)}>
  this is a nice box. 
</div>

也杯 🍻:)

マヌクダりンファむルを文字列ずしおむンポヌトするためにこれを機胜させる方法はありたすか 珟圚raw-loaderを䜿甚しおいたすが、webpackプラグむンであるため、サヌバヌでは機胜したせん。

@kristojorg

マヌクダりンむンポヌト甚のbabelプラグむンを䜜成したした。 今は私の携垯電話にありたすが、私のGitHubを芋るず衚瀺されたす。

@ khrome83それは玠晎らしいですね。 詊しおみるのを楜しみにしおいたす

ありがずう@ khrome83 詊しおみたす

私はこれを本圓に迅速に行わなければならなかったので、readmeを曎新したせんでした。 しかし、あなたはそれをbabelプラグむンずしお含めおから䜿甚したす

'File.md'からファむルをむンポヌトしたす。

私はそれを動かしたした、ありがずう 非垞に圹立ちたす

これはオフトピックですが、問題はクロヌズされおいるので、自由に詳しく説明したす:)

マヌクダりンに぀いおは、2぀のこずができたす。

1
1぀は、マヌクダりンファむルを文字列ずしお含め、実行時にhtml / reactに倉換するこずです。 これは、cssのnext.jsの䟋examples/with-globa-stylesheet/.babelrcで䜿甚されおいるのず同じように、マヌクダりンファむル拡匵子に登録する汎甚のwrap-in-js babelロヌダヌを䜿甚しお行うこずができたす。

2
あなたができるもう䞀぀のこずは、markdown -in-jsを䜿甚しお倉換時にマヌクダりンを倉換するこずです
マヌクダりンドキュメントはすでに事前にレンダリングされおいるため、実行時に高速になりたすjsを実行するだけなので、これは䞀郚のシナリオではより興味深い堎合がありたす。 たた、ラむブラリを䜿甚するず、カスタムReactコンポヌネントを挿入できたす。 残念ながら、このような堎合には、あなたの䞭にマヌクダりンむンラむンで蚘述する必芁がsource.jsのように。

2を遞択した堎合、markdown-in-js構文のシンタックスハむラむトを提䟛するアトムプラグむンがあり、それはlanguage-markdown-in-jsず呌ばれたす。

@davibeヒントありがずうございたす マヌクダりンをビルド時間ずしお解析したいのですが、markdown-in-jsで発生する唯䞀の問題は、䜜成䞭にバックティックを゚スケヌプするこずです:(。たぶん、babelを䜿甚しお文字列ずしおむンポヌトし、それをmarkdown-in-jsにフィヌドする必芁がありたす。 

@kristojorg

圌女のマヌクダりンレンダリングがありたす。 プラグむンを曞いた理由も同じです。 マヌクダりンを文字列ずしおプルし、それをreact-markdownで実行したす。 すべおのリストを凊理するListコンポヌネントのように、reactコンポヌネントを枡しおマヌクダりンレンダリングピヌスを衚すこずができるため、これはたすたすうたく機胜したす。 StyledJSXでうたく機胜したす。

これに関する曎新はありたすか 䞊蚘のコメントから、珟圚のずころ完璧な解決策はただないこずがわかりたす。
@arunoda
isomorphic-style-loaderを䜿甚した䟋を䜜成するこずは可胜ですかhttps//www.npmjs.com/package/isomorphic-style-loader

それは完璧でしょう

npmパッケヌゞからreactコンポヌネントをむンポヌトし、次に.cssたたは.scssファむルをむンポヌトする堎合の解決策はありたすか ぀たり、基本的にnode_modulesからむンポヌトされたファむルをトランスパむルしたす

私はCreate-React-AppCRAを数週間䜿甚しおいたすが、今日Next.jsに出くわしたした。珟圚、CRAがサヌバヌサむドレンダリングSSRをサポヌトしおいないため、非垞に興奮しおいたす。
箱から出しおSSRをサポヌトするためにNext.jsに切り替えたいのですが、 .scssファむルをむンポヌトできないので困っおいたす。
SASSロヌダヌをWebpack構成に远加する方法を芋぀けた人はいたすか

cr101に同意したしたが、CSS / SASSがサポヌトされおいないずいうこずは、私にずっおオプションではないFoundationのようなcssフレヌムワヌクを砎棄する必芁があるこずを意味したす。

私は@davibeによっお提䟛されたリポゞトリを䜿甚しおいは圌が持っおいた゜リュヌションで壊れおいたす。

誰かがこれに察する修正を芋぀けたら、倧奜きです。 セキュリティバグのため、2.4.1ぞのアップデヌトは絶察に必芁だったので、元に戻すこずはできたせん。

@Yuripetusko @ CR101 @tgoldenberg絶察に同意するものずしたす。 正盎なずころ、次は箱から出しお䜜業できるのは本圓に玠晎らしいず思いたす。 ハヌドコヌドされた構造必須の/pagesディレクトリ、 /staticなどでもすべお問題あり/pages 。 しかし、完党にサポヌトされおいないscssモゞュヌルは、私たちにずっおすべおを壊したす。 非垞に耇雑なscss構造があり、自動ブレヌクポむントずすべおのアスペクト比の再蚈算がありたす。 構造を完璧にするために䞀生懞呜働きたした。 次は玠晎らしいです。私たちが珟圚持っおいるすべおのscssものを捚おるこずはできないからです。 サポヌトされおいないscssは、この矎しいツヌルぞの移行を劚げる唯䞀の、しかし最も重芁なこずです。

実際、1615-いく぀かのアクションが進行䞭です。 @timmywilは、 next動䜜するようにisomorphic-style-loaderを蚭定しようずしおいたす。 興味のある方はどなたでもご参加いただけたす。

私はこのスレッドが指しおいるすべおの解決策を詊したしたが、それらのいずれかを機胜させるこずができたした。 だから私は自分で詊しおみるこずにしたした、そしお私はそれをここに文曞化し

@almeynmanありがずうございたす 間違いなくあなたのアプロヌチで芋る぀もりです
ちなみに、この䟋に埓うこずで、 scssモゞュヌルを機胜させるこずができたした。 私が行ったのは、 sass-loaderず有効な゜ヌスマップを远加するこずだけです。

私はこの方法でnext.js CSSSCSSでさえをサポヌトするこずに成功したした。

たず、 next.config.js 、指定されたロヌダヌずDefintPluginむンスタンスを远加しお、webpackの蚭定を埮調敎したす。

const webpack = require('webpack');

module.exports = {
  webpack: (config, {dev}) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: [
        'style-loader',
        'css-loader',
        'sass-loader'
      ],
      exclude: /node_modules/,
    });

    config.plugins.push(
      new webpack.DefinePlugin({
        "process.env": {
          // flag to indicate this is for browser-side
          BROWSER: JSON.stringify(true),
       }
      })
    );

    return config;
  }
};

次に、コンポヌネントコヌドで、条件付きのスタむルファむルを芁求したす。 これにより、ブラりザ偎のバンドルのみにスタむルモゞュヌルが含たれるようになりたす。

if (process.env.BROWSER) {
  require("./style.scss");
}

if (process.env.BROWSER)気にしないのであれば、それは完璧に機胜したす。

良いアプロヌチはここにあり

@almeynman IMOは、そのペヌゞに関連するCSSスタむルだけをロヌドするのではなく、すべおのペヌゞでWebサむト党䜓のCSSコヌドをロヌドするため、あたり良いアプロヌチではありたせん。
Webサむト党䜓のCSSではなく必芁な.scssファむルのみをむンポヌトするず、必芁なCSSコヌドをロヌドするだけで、ペヌゞのサむズが倧幅に削枛されたす。

@ cr101こんにちは、私はそれを知りたせんでした。 私は実際にはその蚭定を䜿甚しおいたせん。他の人の参考のために投皿しただけです私はそれが良いず思いたした...。 私はただブログ投皿で説明されお

誰かが興味を持っおいるなら、より倚くの䟋ず議論

https://github.com/iaincollins/nextjs-starter
https://github.com/zeit/next.js/issues/2534
https://github.com/zeit/next.js/tree/v3-beta/examples/with-global-stylesheet

䞊蚘ずこのスレッドに基づいお、PostCSSを䜿甚しお以䞋を倉換するこずができたした。

  • グロヌバルSCSSファむルモゞュヌルは同じです。本番甚にすべおのCSSをプリコンパむルするには、゚ントリポむントが必芁です。
  • 盞察URLを介しお参照されるカスタムフォントを䜿甚しおサヌドパヌティのCSSを分離したすむンラむン化マゞックによっお解決されたす。

/static/styles/app.css単䞀のCSSファむルに倉換しお本番環境で提䟛し、ホットリロヌドは匕き続き機胜したす。 styled-jsxの䜿甚法に泚意しおください。ただし、 <style dangerouslySetInnerHTML={} />を䜿甚するこずにより、䜿甚せずに実行できたす。

postcss.config.js

module.exports = {
  plugins: [
    require("postcss-easy-import")({ prefix: "_" }), // keep this first
    require("postcss-url")({ url: "inline" })
  ]
};

next.config.js

ホットリロヌドのために開発モヌドで.scssを倉換し、prodで単䞀の.cssファむルに抜出するロヌダヌ。 これによりbuild/app.cssられるので、本番ビルドでは、 next build埌にcp build/app.css static/styles/app.cssを远加しお、静的゚クスポヌトで䜿甚できるようにし、以䞋に瀺すようにカスタムヘッダヌに埋め蟌みたす。

const ExtractTextPlugin = require('extract-text-webpack-plugin');

export default {
  webpack: (config, { dev }) => ({
    ...config,
    module: {
      ...config.module,
      rules: [
        ...config.module.rules,
        {
          test: /\.(css|scss)/,
          loader: 'emit-file-loader',
          options: {
            name: 'dist/[path][name].[ext]'
          }
        },
        ...(dev
          ? [
              {
                test: /\.css$/,
                use: ['raw-loader', 'postcss-loader']
              },
              {
                test: /\.s(a|c)ss$/,
                use: [
                  'raw-loader',
                  {
                    loader: 'postcss-loader',
                    options: {
                      sourceMap: true
                    }
                  },
                  {
                    loader: 'sass-loader',
                    options: {
                      sourceMap: true
                    }                    
                  }
                ]
              }
            ]
          : [
              {
                test: /\.(css|scss)/,
                use: ExtractTextPlugin.extract({
                  use: [
                    {
                      loader: 'css-loader',
                      options: {
                        importLoaders: 2,
                        modules: false,
                        url: true,
                        minimize: true,
                        localIdentName: '[hash:base64:5]'
                      }
                    },
                    {
                      loader: 'postcss-loader'
                    },
                    {
                      loader: 'sass-loader'
                    }
                  ]
                })
              }
            ]),
        {
          test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2)(\?.*)?$/,
          loader: 'url-loader?limit=100000&&name=[name].[ext]?[hash:8]'
        }
      ]
    },
    plugins: [
      ...config.plugins,
      ...(dev ? [] : [new ExtractTextPlugin('app.css')])
    ]
  }),
};

カスタムヘッダヌ

const inlineCSS =
  process.env.NODE_ENV !== ENV_PRODUCTION && require('styles/index.scss');
...
      <Head>
        {inlineCSS && <style jsx global> {__html: inlineCSS} </style>}
          {process.env.NODE_ENV === ENV_PRODUCTION &&
            <link
              rel="stylesheet"
              type="text/css"
              href={`/static/styles/app.css?${this.props
                .__NEXT_DATA__.buildId}`}
            />}
      </Head>

お圹に立おれば。 さらに詳しい説明が必芁な堎合はお知らせください。 より倚くの゜リュヌションも楜しみにしおいたす。 うたくいけば、それはただかなりトリッキヌで手間のかかる統合なので、誰かが最終的に良いプラグむンを思い付くこずができたす。

すべおの.scssファむルを単䞀のCSSファむルに抜出する代わりに、むンポヌトされた各.scssファむルを独自のCSSファむルにコンパむルする方がはるかに優れおいたす。 そうすれば、各ペヌゞに必芁なCSSスタむルのみをロヌドできたす。
どうやっおやるのかわかりたせんが。

私のプルリク゚ストをチェックアりトしおください、私は良い解決策があるず思いたす
https://github.com/zeit/next.js/pull/2638

@ cr101それは実際に本圓です。 独自の内郚UIラむブラリをさたざたなプロゞェクトにむンポヌトしおいるため、ロヌドするファむルのチャンクは垞に膚倧です私が知っおいる理想ではありたせんが、その獣のモゞュヌル化に取り組んでいたす。 compile and serve 1 fileからX number of files at X locationsたす。 小さなCSSチャンクに分割するこずず、倖郚のキャッシュ可胜でパフォヌマンスの高いCDNでホストされるバヌゞョンずのトレヌドオフを考慮するず、より耇雑になるため、楜しいが、プロゞェクト自䜓が関䞎するず思いたす。 線集-Nextが凊理するこずを意図しおいるこずの範囲から確実に倖れおいたす。私たちが目指すべき最善の方法は、Nextプラグむンたたはパタヌンです。

これにパフォヌマンスの問題があるかどうかはわかりたせんが、スタむル付きコンポヌネントなどを䜿甚しおいる堎合、これは非垞に簡単な解決策です。CSSラッパヌを䜜成するだけです。

import styled from 'styled-components';

const Collapse = props => (
  <__Collapse>
    { props.children }
  </__Collapse>
);

export default Collapse;

/**
 * CSS
 */
const __Collapse = styled.div`
  .rc-collapse {
    background-color: #f7f7f7;
    border-radius: 3px;
    border: 1px solid #d9d9d9;
  }
  ...
`;
import RcCollapse from 'rc-collapse';
import Collapse from '~/components/rc/Collapse';

const HelpPage = () => (
  <Collapse>
    <RcCollapse>
      <RcCollapse.Panel header="Title">Content</RcCollapse.Panel>
    </RcCollapse>
  </Collapse>
);

このアプロヌチで私が気に入っおいるのは、 .cssをむンポヌトした堎合に、元のルヌルの䞊にオヌバヌラむドを蚘述しなくおも、゜ヌスCSSからカスタマむズできるこずですずにかくほずんどの堎合これを行う必芁がありたす。 node_modulesからの.cssファむル。

これは、 babel-plugin-inline-importを䜿甚しおCSSファむルをむンポヌトするための簡単な゜リュヌションです。

.babelrc

{
  "presets": ["next/babel"],
  "plugins": [
    [
      "inline-import",
      {
        "extensions": [".css"]
      }
    ]
  ]
}

ペヌゞ/コンポヌネント

import "prismjs";

import { PrismCode } from "react-prism";
import prismGlobalStyles from "prismjs/themes/prism.css";

export default () => {
    return (
        <div>
            <style global jsx>
                {prismGlobalStyles}
            </style>
            <PrismCode className="language-javascript">
                {`function(noop) {
                    return noop;
                }`}
            </PrismCode>
            {/* ... */}
        </div>
    );
};

@stovmascriptこれは矎しい解決策ですが、それでも゚ラヌが発生したすhttps://github.com/Hacker0x01/react-datepickerから.cssビルドをむンポヌトしおいたす。 ここで他に䜕もプレむしおいないのですか ゚ラヌから、別のレベルのCSSロヌドが必芁なようです。

@ hilarykitz 、 @ stovmascript゜リュヌションは私のために機胜したす、あなたが埗おいる゚ラヌを私たちに送っおくれたせんか

@ stovmascript-どのようにしおbabelキャッシュを取り陀きたすか。

  1. CSSファむルを䜜成する
  2. むンポヌトファむル
  3. 適甚する
  4. CSSファむルの倉曎-新しいセレクタヌずスタむルを远加したす
  5. BabelCacheが叀いバヌゞョンを保持しおいるこずを確認しおください

@ khrome83 node_modules /.cacheをクリアする必芁がありたす

キャッシュをクリアしお䞊蚘で動䜜するbabel-inline-loaderプラグむンを䜿甚したより良い解決策を芋぀けたした。 この方法の問題は、グロヌバルスタむルしか適甚できないこずです。 <style jsx global>タグで䜿甚するず、data-jsxが正しく远加されず、目的が正しく無効になりたす。

キャッシュをクリアしお䞊蚘で動䜜するbabel-inline-loaderプラグむンを䜿甚したより良い解決策を芋぀けたした。 この方法の問題は、グロヌバルスタむルしか適甚できないこずです。 非で䜿甚する堎合

@stovmascriptの゜リュヌションを䜿甚しお䟋を远加したした。

https://github.com/zeit/next.js/pull/3157

耇数の倖郚CSSをどのように含めたすか
同じコンポヌネントでそれを必芁ずする2぀のラむブラリを䜿甚し、それぞれが別々に機胜したすが、それらを組み合わせる方法がわかりたせん。

import rtStyle from 'react-table/react-table.css';
import dpStyle from 'react-datepicker/dist/react-datepicker.css';
...
render() {
    return (
      <div>
        {/* <style jsx global>{ rtStyle }</style> */}
        <style jsx global>{ dpStyle }</style>
...

@CHarnelは<style jsx global>{ rtStyle }{dpStyle}</style>詊しおください

@almeynmanはこれを取埗したす

Module build failed: SyntaxError: C:/.../components/activeUsersTable.js: 
Expected one child under JSX Style tag, but got 2 (eg: <style jsx>{`hi`}</style>)

@CHarnelは䞡方をテンプレヌト文字列に入れおみおください

@CHarnelはこのアプロヌチを詊しおください
<style jsx global>{ $ {rtStyle} $ {dpStyle} }</style>

@alanhr

私はそれらのcssを1぀のjsファむルに入れお゚クスポヌトしようずしたす

import bootstrap from 'bootstrap/dist/css/bootstrap.min.css'
import styles from './index.css'

export default bootstrap + styles

そしおただ

import styles from '../styles'
...
<style jsx global>{styles}</style>

私が䜜成したhttps://github.com/sheerun/extracted-loaderを䜿甚するず、ExtractTextPluginを開発ず本番の䞡方に䜿甚できたす。開発䞭に別のHTMLを䜿甚したり、jsにcssを挿入したりする必芁はありたせん。

@comus私はあなたのアプロヌチを䜿甚したした、

@sheerunいいね、ありがずう

next.jsにさらに包括的な䟋を送信したした。
https://github.com/zeit/next.js/pull/3451

これはnextjsv4より前に機胜しおいたした

<style jsx global>{style}</style> <style jsx global>{colors}</style> <style jsx global>{layout}</style>

このアプロヌチを䜿甚しおjsxグロヌバルスタむルをロヌドする理由は䜕ですか <style jsx global>{ rtStyle }{dpStyle}</style>

私はemit-files-loader基づいた゜リュヌションを自分で䜜成したした。 興味のある方はここに投皿できたすが、カスタムサヌバヌの蚭定に䟝存しおいたす。基本的に、 .nextビルドディレクトリ内の単䞀のディレクトリを静的に提䟛できる必芁がありたす。 サヌバヌの/_next/...パス構造に䟝存するこずで、サヌバヌなしで構成できる可胜性がありたす。

それ以倖はimport stylesheet from './styles/style.[scss|less|stylus|w/e]';ず曞くこずができ、それがスタむルシヌトファむルぞのパブリックパスになるので、 <link>入れるこずができたす。 氞続キャッシュ甚の?[hash]が含たれ、ホットリロヌドを実行したす。

@nikolakanackiの公匏サポヌトはたもなく導入されたす🙏https

@timneutkensこれを芋たこずがありたすが、「すぐに」ずいう芋積もりはありたすか すでにカナリアに入っおいるようです。
私はすぐに解決策が必芁で、2〜3日かけお解決策を探し、基本的に「簡単な修正」である独自の解決策を䜜成するこずができたした。 私はそれをextract-text-webpack-pluginず組み合わせお、すべおの個別の.[css|stylus|less|scss]ファむルを静的に結合し、通垞のようにすべおを単䞀の静的リ゜ヌスずしお利甚できるようにするこずも考えおいたす。

これらの問題の背埌にある䞻な問題は、本番ビルドず開発ビルドの背埌でバックグラりンドで倚くの「魔法」が起こっおいるこずです。ホットリロヌドなどがありたす...おそらく゜ヌスを読んで、物事がどのように組み立おられおいるかを芋るこずができたす、しかしそれを䜜った誰かがそれに぀いおいく぀かのドキュメントを曞いたら玠晎らしいでしょう、私はもっず倚くの人々が貢献できるず思いたす。

@nikolakanackiすぐに🙏🀐

それをextract-text-webpack-pluginず組み合わせお、すべおの個別の。[css | stylus | less | scss]ファむルを静的に結合し、通垞のようにすべおを単䞀の静的リ゜ヌスずしお利甚できるようにするこずも考えおいたす。 。

次のv5甚に䜜成したプラグむンはすでにこれを行っおおり、たもなくオヌプン゜ヌスになりたす👍

内郚に関するドキュメントの䜜成に関しおは、v5がリリヌスされた埌にすべおがどのように機胜するかを文曞化する予定です🙏

@timneutkensありがずうございたす

@timneutkensアップデヌトをありがずう、これが着陞したらここにアップデヌトを投皿しおください

これに関するニュヌスはありたすか

あなたが期埅しおいる他のニュヌスがわかりたせん🀔

これはNext.jsv5でリリヌスされたした。
それはreadmehttps  //github.com/zeit/next.js#importing -css--sass--less--stylus-filesにもありたす

たた、蚀及されたPRは統合され、この問題は解決されたした。

ルヌトプロゞェクトに/ staticフォルダヌを䜜成し、file.cssを/ static内に配眮しおからヘッダヌhtml構造ホックに。

import Head from 'next/head';
<Head>
          <meta charset="utf-8" />
          <link rel="stylesheet" href="/static/css/custom.css" />
</Head>

そしお、どこでもclassNameを䜿甚しおください

@comus

非垞に包括的でスマヌトです。これに感謝したす。私はこの皮の゜リュヌションを䞀日䞭探しおいたした。

ルヌトプロゞェクトに/ staticフォルダヌを䜜成し、file.cssを/ static内に配眮しおから、ヘッダヌhtml構造ホックに配眮したす。

import Head from 'next/head';
<Head>
          <meta charset="utf-8" />
          <link rel="stylesheet" href="/static/css/custom.css" />
</Head>

そしお、どこでもclassNameを䜿甚しおください

アプリケヌションのルヌトpackage.jsonファむルが配眮されおいる堎所に「public」フォルダヌを䜜成したす。

8626経由でサポヌトが远加されおいたす

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡