ReactコンポーネントにCSSファイルをインポートする方法


98

CSSファイルをreactコンポーネントにインポートしたい。

試しましimport disabledLink from "../../../public/styles/disabledLink";たが、以下のエラーが発生します。

モジュールが見つかりません:エラー:c:\ Users \ User \ Documents \ pizza-app \ client \ src \ components @の「file」または「directory」../../../ public / styles / disabledLinkを解決できません。 /client/src/components/ShoppingCartLink.js 19:20-66ハッシュ:2d281bb98fe0a961f7c4バージョン:webpack 1.13.2

C:\Users\User\Documents\pizza-app\client\public\styles\disabledLink.css ロードしようとしているCSSファイルの場所です。

私には、インポートが正しいパスを検索していないように見えます。

../../../それで、3つのフォルダーレイヤーの上のパスを検索し始めると思いました。

C:\Users\User\Documents\pizza-app\client\src\components\ShoppingCartLink.js CSSファイルをインポートする必要があるファイルの場所です。

何が間違っているので、どうすれば修正できますか?


どうしたの:D、上の2つのフォルダー(components&src)のように見えます
Steeve Pitis 2016年

ねえ、あなたは正しいですが、それでも機能しません。CSSファイル内でエクスポートを使用できないため、インポートを使用できないことに気付きました
venter 2016年


エラーが発生します-> @ media only screen and(min-width:320px)and(max-width:640px){^ SyntaxError:Invalid or expected token at Module._compile(internal / modules / cjs / loader.js:723 :23)
Sadanand

回答:


159

次のようにする必要がない場合は、名前を付ける必要もありません。

例えば

import React from 'react';
import './App.css';

ここで完全な例を参照してください(ReactコンポーネントとしてJSX Liveコンパイラをビルドします)。


5
babelレジスタでmochaを実行しようとすると、機能しません... I:\ .... css:1(function(exports、require、module、__ filename、__ dirname){。filter-bg {^ SyntaxError:予期しないトークン。
JGleason

3
または、react-helmetを使用して、<head>タグにcss(URLの場合)を挿入します
Kira

53

webpackでバンドルを作成するときは、css-loaderを使用する必要があります。

それをインストールします:

npm install css-loader --save-dev

そして、それをwebpack構成のローダーに追加します。

module.exports = {
  module: {
    loaders: [
      { test: /\.css$/, loader: "style-loader!css-loader" },
      // ...
    ]
  }
};

この後、jsにcssファイルを含めることができるようになります。


1
このプロジェクトに別のモジュールをインポートすることは許可されていません。彼らの別のソリューションはreactjsまたはネイティブjsでのみ機能しますか?
ベンター2016年

だから私は次のようなものを使わなければならないと思います:HTMLElement.style
venter 2016年

少し醜いです。バンドル構築に変更を追加できないのはなぜですか?
アレクサンドル・ラザレフ2016年

それはreactjs程度workshipのための後処理だと我々はworkship中に含まれるモジュールとの要件を解決するように言われている
ベンター

わかりましたが、質問で尋ねたように、スタイルタグのフェッチはcssファイルをインポートしないことを述べたいと思います。これらは2つの異なる問題です。
アレクサンドル・ラザレフ2016年

32

CSSモジュールの使用をお勧めします。

React

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

export default class Table extends React.Component {
    render () {
        return <div className={styles.table}>
            <div className={styles.row}>
                <div className={styles.cell}>A0</div>
                <div className={styles.cell}>B0</div>
            </div>
        </div>;
    }
}

コンポーネントのレンダリング:

<div class="table__table___32osj">
    <div class="table__row___2w27N">
        <div class="table__cell___2w27N">A0</div>
        <div class="table__cell___1oVw5">B0</div>
    </div>
</div>

以下の答えとしてパート1を追加します。そして、あなたは私の答えに従ってあなたのコンポーネントをテストすることができます。
Mihir Patel 2016

2
これを試してみても機能しない場合。私はそれをimport styles from "./disabledLink.css";次のように含めようとしました:そして次のエラーが発生します:モジュールが見つかりません:エラー:c:\ Users \ Basti Kluth \ Documents \ pizza-appの「file」または「directory」./ disabledLink.cssを解決できません\ client \ src \ components @ ./client/src/components/ShoppingCartLink.js 19:20-49
ベンター

1
cssモジュールは別々に
Alexandr Lazarev

1
そして、どうすればそのようなタイプのCSS、任意のアイデアのメディアクエリを書くことができますか?
Sonu Bamniya 2018

18

以下は、Reactコンポーネントに外部CSSファイルをインポートし<head />、WebサイトのCSSルールを出力します。

  1. スタイルローダーCSSローダーをインストールします。
npm install --save-dev style-loader
npm install --save-dev css-loader
  1. webpack.config.jsの場合:
module.exports = {
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [ 'style-loader', 'css-loader' ]
            }
        ]
    }
}
  1. コンポーネントファイルの場合:
import './path/to/file.css';

そして、私はウォッチャーを実行するためにbabelを使用しています。たぶんそれはwebpack.config.jsファイルをまったく見ていません
AntonDanilchenko18年

css-loaderをインストールしましたか?また、webpack.config.jsが表示されません。
Webars 2018年

1
rules配列の値として、オブジェクト形式のモジュールルールをさらに追加できます。
アリ

4

上記のソリューションは完全に変更され、非推奨になりました。CSSモジュールを使用したい場合(css-loadersをインポートしたと仮定)、私はこれに対する答えを長い間見つけようとしていて、ついにそうしました。デフォルトのwebpackローダーは新しいバージョンではかなり異なります。

Webpackで、cssRegexで始まるパーツを見つけて、これに置き換える必要があります。

{
  test: cssRegex,
  exclude: cssModuleRegex,
  use: getStyleLoaders({
      importLoaders: 1,
      modules: true,
      localIdentName: '[name]__[local]__[hash:base64:5]'
  }),
}


2

CSSモジュールを使用すると、名前の衝突を気にすることなく、異なるファイルで同じCSSクラス名を使用できます。

Button.module.css

.error {
  background-color: red;
}

another-stylesheet.css

.error {
  color: red;
}

Button.js

import React, { Component } from 'react';
import styles from './Button.module.css'; // Import css modules stylesheet as styles
import './another-stylesheet.css'; // Import regular stylesheet
class Button extends Component {
  render() {
    // reference as a js object
    return <button className={styles.error}>Error Button</button>;
  }
}

1
  1. スタイルローダーとCSSローダーをインストールします。

    npm install --save-dev style-loader
    npm install --save-dev css-loader
    
  2. webpackを構成する

    module: {
            loaders: [
                {
                    test: /\.css$/,
                    loader: 'style-loader'
                }, {
                    test: /\.css$/,
                    loader: 'css-loader',
                    query: {
                        modules: true,
                        localIdentName: '[name]__[local]___[hash:base64:5]'
                    }
                }
            ]
        }
    

0

スタイルシート全体にバンドルせずに、スタイルシートからコンポーネントにいくつかのスタイルを挿入したい場合は、https://github.com/glortho/styled-importをお勧めします。例えば:

const btnStyle = styledImport.react('../App.css', '.button')

// btnStyle is now { color: 'blue' } or whatever other rules you have in `.button`.

注:私はこのライブラリの作成者であり、スタイルとCSSモジュールの大量インポートが最善または最も実行可能なソリューションではない場合のために作成しました。



0

extract-css-chunks-webpack-pluginとcss-loaderloaderを使用すると、以下を参照してください。

webpack.config.jsインポートextract-css-chunks-webpack-plugin

const ExtractCssChunks = require('extract-css-chunks-webpack-plugin');

webpack.config.js cssルールを追加し、最初にcssチャンクを抽出してからcssローダーcss-loaderがそれらをhtmlドキュメントに埋め込み、css-loaderとextract-css-chunks-webpack-pluginがpackage.jsondevにあることを確認します依存関係

rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: ExtractCssChunks.loader,
          },
          'css-loader',
        ],
      }
]

webpack.config.jsプラグインのインスタンスを作成します

plugins: [
    new ExtractCssChunks({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: '[name].css',
      chunkFilename: '[id].css'
    })
  ]

そして今、cssのインポートが可能です そして今index.tsxのようなtsxファイルで私はこのインポートのようなインポートを使うことができます './Tree.css'ここでTree.cssは次のようなcssルールを含んでいます

body {
    background: red;
}

私のアプリはtypescriptを使用しており、これは私のために機能します。ソースのリポジトリを確認してくださいhttps//github.com/nickjohngray/staticbackeditor


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.