1

我是 ReactJS 的新手。我正在尝试使用 scss 使用 sass-loaders 做出反应

我的 webpack 配置看起来像这样-

var webpack = require('webpack');
var path = require('path');

var APP_DIR = path.resolve(__dirname + 'react-js/src/');
var BUILD_DIR = path.resolve(__dirname, 'react-js/dist/');

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

module.exports = {
    entry: './react-js/src/index.jsx',
    output: {
        path: BUILD_DIR,
        publicPath: '/dist',
        filename: 'bundle.js'
    },
    resolve: {
        extensions: ['.js', '.jsx']
    },
    module: {
        loaders: [
            { 
                test: /\.css$/,
                loader: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: 'css-loader',
                    publicPath: '/dist'
                })
            },
            { 
                test: /\.scss$/,
                loader: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: 'css-loader!sass-loader',
                    publicPath: '/dist'
                })
            },
            { 
                test: /\.(js|jsx)$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                  presets: ['react', 'es2015']
                }
            }
        ]
    },
    plugins: [
        new ExtractTextPlugin('styles.css'),
    ]
}

所有这些配置都来自那里的相应文档。

.

当我运行 webpack-dev-server 它显示以下输出-

WDS 启动

这是我保存 scss 文件时的屏幕 - 注意- 我已经从我的 webpack 配置文件中删除了 ExtractTextPlugin。

WDS on scss 文件保存

目录结构-

在此处输入图像描述

我只是不知道它是如何不导入到渲染的反应应用程序中的。我认为如下所示在 index.jsx 中导入 scss 文件会使 css 文件成为依赖项,但它不起作用。

import React from 'react';
import ReactDOM from 'react-dom';

import App from './app';

import style from '../../scss/main.scss';

ReactDOM.render(
    <App />, 
    document.getElementById('root')
);

为什么?

已编辑

包.json

{
  "name": "skippo-vendor-admin-webui",
  "version": "1.0.0",
  "description": "",
  "main": "./react-js/src/index.jsx",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "./node_modules/.bin/webpack -d --progress --colors",
    "prod": "./node_modules/.bin/webpack -p --progress --colors",
    "watch": "./node_modules/.bin/webpack -d --progress --colors --watch",
    "start": "./node_modules/.bin/webpack-dev-server --progress --colors --hot --inline --contentBase './react-js/'"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.24.1",
    "babel-loader": "^7.0.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "chai": "^3.5.0",
    "css-loader": "^0.28.1",
    "extract-text-webpack-plugin": "^2.1.0",
    "karma": "^1.6.0",
    "karma-chai": "^0.1.0",
    "karma-chrome-launcher": "^2.1.1",
    "karma-mocha": "^1.3.0",
    "karma-sinon": "^1.0.5",
    "karma-webpack": "^2.0.3",
    "mocha": "^3.3.0",
    "node-sass": "^4.5.2",
    "sass-loader": "^6.0.3",
    "sinon": "^2.2.0",
    "style-loader": "^0.17.0"
  },
  "dependencies": {
    "react": "^15.5.4",
    "react-dom": "^15.5.4",
    "react-redux": "^5.0.4",
    "react-router": "^4.1.1"
  }
}
4

2 回答 2

2

ExtractTextPlugin应该只用于您的生产构建,因为它将创建一个单独的编译 css 文件,可以在没有任何特殊处理的情况下提供该文件。

对于开发,您可以改用此规则:

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

如果您没有 3 个加载器,请将它们安装为开发依赖项。

另外,导入 scss 文件时无需指定名称,只需导入即可。

import  '../../scss/main.scss';
于 2017-05-06T16:54:27.943 回答
1

更改此行

import style from '../../scss/main.scss';

import  '../../scss/main.scss';
于 2017-05-06T16:36:08.663 回答