Как реализовать sass в приложении ReactJS с помощью webpack? - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь реализовать в своем проекте sass-loader на основе reactjs. Однако я получаю ошибку ниже каждый раз, когда создаю

ERROR в ./src/modules/Login/login.scss Сборка модуля завершилась неудачно (из ./node_modules/sass-loader/dist/c js. js): SassError: Invalid CSS after «// Imports»: ожидался 1 селектор или at-правило, было «var> ___CSS_LOADER_A» в строке 1 C: \ development \ basic_auth \ client \ src \ modules \ Login \ login.scss // Импортирует

Ниже мой webpack.config. js

const path = require('path');
const webpack = require('webpack');
const dotenv = require('dotenv');
const HWP = require('html-webpack-plugin');

const env = dotenv.config().parsed;
const envKeys = Object.keys(env).reduce((prev, next) => {
  prev[`process.env.${next}`] = JSON.stringify(env[next]);
  return prev;
}, {});

module.exports = {
  watch: true,
  entry: path.join(__dirname, '/src/index.js'),
  devServer: {
    port: process.env.PORT || 8080,
    historyApiFallback: true,
  },
  output: {
    filename: 'build.js',
    path: path.join(__dirname, '/dist')
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.(scss|css)$/i,
        exclude: /node_modules/,
        use: [
          {
            loader: 'sass-loader',
            options: {
              sourceMap: process.env.NODE_ENV !== 'production',
            },
          },
          {
            loader: 'css-loader',
            options: {
              sourceMap: process.env.NODE_ENV !== 'production',
            }
          }
        ],
      },
    ]
  },
  plugins: [
    new HWP(
        {template: path.join(__dirname, '/public/index.html')}
    ),
    new webpack.DefinePlugin(envKeys)
  ],
  node: {
    fs: "empty"
  }
 }

package. json

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "main": "index.js",
  "dependencies": {
    "axios": "^0.18.0",
    "classnames": "^2.2.6",
    "dotenv": "^8.2.0",
    "is-empty": "^1.2.0",
    "jwt-decode": "^2.2.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-redux": "^7.0.3",
    "react-router-dom": "^5.0.0",
    "react-scripts": "3.0.1",
    "redux": "^4.0.1",
    "redux-thunk": "^2.3.0"
  },
  "scripts": {
    "proxy": "http://localhost:8081",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "start": "webpack-dev-server --mode development --inline",
    "build": "webpack —-mode production"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@babel/cli": "^7.10.1",
    "@babel/core": "^7.10.2",
    "@babel/node": "^7.10.1",
    "@babel/plugin-proposal-class-properties": "^7.10.1",
    "@babel/preset-env": "^7.10.2",
    "@babel/preset-es2015": "^7.0.0-beta.53",
    "@babel/preset-react": "^7.10.1",
    "babel-loader": "^8.1.0",
    "css-loader": "^3.6.0",
    "html-webpack-plugin": "^4.3.0",
    "mini-css-extract-plugin": "^0.9.0",
    "node-sass": "^4.14.1",
    "sass-loader": "^8.0.2",
    "sass-resources-loader": "^2.0.3",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.0"
  }
}

login.s css

body {
  background-color: #f2f3fa;
}

.login-content {
  max-width: 900px;
  margin: 100px auto 50px;
  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .16), 0 2px 10px 0 rgba(0, 0, 0, .12);
}

.auth-head-icon {
  position: relative;
  height: 60px;
  width: 60px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  background-color: #fff;
  color: #5c6bc0;
  box-shadow: 0 5px 20px #d6dee4;
  border-radius: 50%;
  transform: translateY(-50%);
  z-index: 2;
}

.registerSectionWrapper {
  background-color: #4a5ab9;
}

Я новичок во всей этой настройке. Если кто-нибудь может мне помочь, я буду благодарен

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

, если вы не используете загрузчик стилей, вы не сможете импортировать файлы s css или css внутри своего приложения.

module:{
rules:[{
            test: /\.s?css$/,
            use: ["style-loader", "css-loader", "sass-loader"] 
     }]
}

в этой настройке sass-loader будет преобразовать синтаксис s css в css. тогда css -загрузчик возьмет на себя управление и проверит наличие ошибок. если ошибки нет, style-loader поможет импортировать файлы стилей и внедрить стили в ваше приложение.

0 голосов
/ 21 июня 2020

Я заметил, что вам не хватает style-loader в конфигурации вашего веб-пакета, который мне всегда приходилось включать для правильной работы стилей sass-loader: webpack

...