将CSS文件导入到特定组件React App

时间:2018-12-02 15:21:49

标签: css reactjs import

我正在尝试将CS​​S导入到我的React应用程序的特定组件中。

webpack配置:

{
    test: /\.css$/,
    loader: ExtractTextPlugin.extract({
        use: 'css-loader',
    }),
}

,但不应用CSS。

我还在index.html中包含了主要的CSS。这是为什么我无法应用另一个CSS文件的原因吗?

<link rel="stylesheet" href="../style/style.css">

您能建议我所缺少的内容吗?

1 个答案:

答案 0 :(得分:0)

这取决于您使用的webpack版本。例如,如果您使用的是Webpack 4,则您的development配置为:

{
  test: /\.s?css$/, // test for scss or css files 
  use: [
    'style-loader', // try to use style-loader or...
    {
      loader: 'css-loader', // try to use css-loader 
      options: {
        sourceMap: true, // allow source maps (allows css debugging)
        modules: true, // allow css module imports
        camelCase: true, // allow camel case imports
        localIdentName: '[local]___[hash:base64:5]', // set imported classNames with a original className and a hashed string in the DOM, for example: "exampleClassName__2fMQK"
      },
    },
  ],
}

example.css (必须使用驼峰箱而不是蛇形箱)

.exampleClassName {
   text-align: center;
}

example.js

import React from 'react';
import { exampleClassName } from './example.css';

export default () => (
  <h1 className={exampleClassName}>I am centered!</h1>
)

在生产中,您需要使用OptimizeCSSAssetsPluginMiniCssExtractPlugin

minimizer: [
  new OptimizeCSSAssetsPlugin({ 
    cssProcessorOptions: { 
      map: { 
        inline: false, 
        annotation: true 
      } 
    } 
  }),
],
{
  plugins: [
    new MiniCssExtractPlugin({
        filename: `css/[name].[contenthash:8].css`,
        chunkFilename: `[id].[contenthash:8].css`,
    }), 
  ]
}

运行webpack来构建用于生产的应用程序时,它将编译css,并且(当webpack配置正确设置时)将生成一个index.html,它会自动添加link到已编译的样式表。

Webpack的学习曲线很陡,上面的示例中有很多遗漏的选项,因此,如果您只是想使其启动并运行,那么我有一个Webpack-React-Boilerplate,其(s)css模块导入,并且已经为您配置了更多功能。我在webpack配置文件中包含了注释,以帮助您了解每个选项的作用。

否则,如果您尝试学习旧版本的webpack,则可以弹出create-react-app并进行反向工程/查看其广泛的webpack注释。