【问题标题】:Webpack - Build css not appliedWebpack - 未应用构建 css
【发布时间】:2017-10-04 22:42:35
【问题描述】:

我是 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 时,它显示以下输出-

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

目录结构 -

我只是不知道它是如何不导入到渲染的 React 应用程序中的。我认为如下所示在 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"
  }
}

【问题讨论】:

    标签: reactjs webpack webpack-style-loader css-loader extract-text-plugin


    【解决方案1】:

    ExtractTextPlugin 应该只用于您的生产构建,因为它将创建一个单独的已编译 css 文件,无需任何特殊处理即可提供。

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

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

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

    另外,导入 scss 文件时不需要指定名称,直接导入即可。

    import  '../../scss/main.scss';
    

    【讨论】:

    • 谢谢兄弟!!这适用于 webpack -d 命令。但它不适用于 webpack-dev-server。这是为什么? WDSi 的配置是否错误?我已经用 package.json 文件更新了这个问题。它包括用于 WDS 的命令。再次感谢
    • 你不能在你的watch 脚本中使用 webpack 吗?不过,您可能必须在 webpack 配置中添加 hot 选项。
    • 是的,我能做到。但重点是我现在正在学习东西。所以我不想跳过 webpack-dev-serverExtractTextPlugin 只是因为我不知道如何为我的环境设置它。 @Apercu
    • 是的,这是什么行为?有任何错误或警告吗?样式处理是否记录在控制台中?你确定你的配置被 wds 拾取了吗?而且我从来没有说过要跳过 ExtractTextPlugin,只是不要将它用于开发。
    • 太棒了!!请参阅我已使用 2 个 WDS 屏幕截图更新了问题。我很困惑,即使我删除了 ExtractTextPlugin,它仍然显示在 WDS css build 中。
    【解决方案2】:

    改变这一行

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

    import  '../../scss/main.scss';
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 2017-07-10
      • 2016-09-14
      • 1970-01-01
      • 2020-12-26
      • 2018-03-11
      • 1970-01-01
      • 2018-09-23
      • 2017-12-30
      相关资源
      最近更新 更多