安装React样式的组件

时间:2018-09-01 13:17:01

标签: reactjs npm webpack babel styled-components

我无法使样式化组件正常工作;必须在我的设置中。这是组件:

import React from 'react';
import styled from 'styled-components';

const Wrapper = styled.div`
  display: flex;
  justify-content: center;
  margin-top: 100px;
`;

const TestComponent = () => (
  <Wrapper>
    TEST
  </Wrapper>
);

export default TestComponent;

渲染后,它只是<div>,带有时髦的class,但没有样式。

我的package.json

{
  "name": "Lolland",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server --open --mode development",
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/runtime": "^7.0.0",
    "axios": "^0.18.0",
    "babel-plugin-styled-components": "^1.6.0",
    "babel-runtime": "^6.26.0",
    "history": "^4.7.2",
    "mobx": "^5.1.0",
    "mobx-react": "^5.2.5",
    "mobx-react-router": "^4.0.4",
    "mobx-rest": "^2.2.5",
    "mobx-rest-axios-adapter": "^2.1.1",
    "prop-types": "^15.6.2",
    "query-string": "^6.1.0",
    "react": "^16.4.2",
    "react-dom": "^16.4.2",
    "react-router": "^4.3.1",
    "react-spinners": "^0.4.5",
    "recompose": "^0.30.0",
    "styled-components": "^3.4.5"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.0",
    "babel-plugin-styled-components": "^1.6.0",
    "eslint": "^5.4.0",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.1.1",
    "eslint-plugin-react": "^7.11.1",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.2.0",
    "webpack": "^4.17.1",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.7"
  }
}

我的.babelrc

{
  "presets": ["@babel/preset-env", "@babel/preset-react"],
  "plugins": ["@babel/plugin-transform-runtime", "emotion", "babel-plugin-styled-components"]
}

还有我的webpack.config.js

const HtmlWebPackPlugin = require('html-webpack-plugin');

module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
      {
        test: /\.html$/,
        use: [
          {
            loader: 'html-loader',
          },
        ],
      },
    ],
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: './src/index.html',
      filename: './index.html',
    }),
  ],
};

1 个答案:

答案 0 :(得分:2)

我们一起在评论中找出了答案,但对于那些将来会绊脚石的人:

插件的顺序很重要。在styled-components之前放置emotion可以解决冲突,因为情感插件会解析导入声明并以此为基础进行处理。请参见code here。另一方面,styled-components插件会解析package name,但仍使用导入声明,因此会产生冲突。