gpt4 book ai didi

css - 为什么 ExtractTextPlugin 通过插件创建一个空的 css 文件?为什么 sass 加载器在使用 Webpack 导入时提供空对象?

转载 作者:行者123 更新时间:2023-11-28 15:51:34 25 4
gpt4 key购买 nike

我已将 webpack 配置为使用 ExtractTextPlugin 从 sass 生成单个 css 文件,并允许它通过 webpack 加载程序导入在 reactjs 应用程序中可用。

sass 文件的使用是通过 react 组件中的 import 语句检测到的,并且正在生成一个输出文件,但是生成的 main.css 文件是空的,导入返回一个空的样式对象,有人知道吗我做错了什么?

结构

client
- app
- components
- navbar
Navbar.js
navbar.scss
- public
- styles
main.scss
bundle.js
index.html

Webpack 配置

const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const BUILD_DIR = path.resolve(__dirname, 'public');
const APP_DIR = path.resolve(__dirname, 'app');

const config = {
entry: APP_DIR + '/index.js',
output: {
path: BUILD_DIR,
filename: 'bundle.js'
},
externals: {
'cheerio': 'window',
'react/lib/ExecutionEnvironment': true,
'react/lib/ReactContext': true,
},
module : {
loaders : [
{
test : /\.jsx?/,
include : APP_DIR,
loader : 'babel'
},
{
test: /\.scss$/,
include : APP_DIR,
loader: ExtractTextPlugin.extract('css!sass')
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'My App'
}),
new ExtractTextPlugin('styles/main.css', {
allChunks: true
})
]
};

module.exports = config;

导航栏.scss

.navbar {
display: flex;

.navbarBrand {

}
}

Navbar.js

import React, { Component, PropTypes } from 'react'
import classnames from 'classnames'
import Login from '../login/Login'
import Logout from '../logout/Logout'
import styles from './navbar.scss';


export default class Navbar extends Component {

render() {
const { isAuthenticated, errors, onLogin, onLogout } = this.props;

console.log(styles);
const navBarStyles = classnames(styles.navbar);
const navBarBrandStyles = classnames(styles.navbarBrand);

return (
<nav className={navBarStyles}>
<div className='container-fluid'>
<a className={navBarBrandStyles} href="#">User Management App</a>
<div className='navbar-form'>

{!isAuthenticated &&
<Login
errors={errors}
onLoginClick={ (creds) => onLogin(creds) }
/>
}

{isAuthenticated &&
<Logout onLogoutClick={() => onLogout()} />
}

</div>
</div>
</nav>
)
}
}

Navbar.propTypes = {
isAuthenticated: PropTypes.bool.isRequired,
errors: PropTypes.arrayOf(PropTypes.string),
onLogin: PropTypes.func.isRequired,
onLogout: PropTypes.func.isRequired
};

症状

加载器和导入器(不再是问题,请引用下面的答案)

  1. console.log(styles) = 对象{}

  2. styles.navbar = undefined

插件

  1. public/styles/main.css 是空的(不再是问题,请引用下面的答案)

问题

  1. 为什么在 Narbar.js 中导入样式时样式为空对象?我配置错了什么? (我已找到解决方案并在下面的答案部分提供了答案)
  2. 为什么 public/style/main.css 是空的? (我已找到解决方案并在下面的答案部分提供了答案)

最佳答案

sass-loader 已修复。

关键是为 css-loader 添加 modules=true,然后您可以从 scss 文件中导入样式。

{
test: /\.scss$/,
loader: extractCSS.extract('style', 'css?modules=true!sass?sourceMap=true')
}

public/style/main.css 已修复。

老实说,我不确定有什么区别,但 public/styles/main.css 文件现在已填充。

我所做的唯一更改是 webpack 配置。

const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const BUILD_DIR = path.resolve(__dirname, 'public');
const APP_DIR = path.resolve(__dirname, 'app');

let generateHtml = new HtmlWebpackPlugin({ title: 'My App' });
let extractCSS = new ExtractTextPlugin('styles/[name].css', { allChunks: true });

const config = {
entry: APP_DIR + '/index.js',
output: {
path: BUILD_DIR,
filename: 'bundle.js'
},
externals: {
'cheerio': 'window',
'react/lib/ExecutionEnvironment': true,
'react/lib/ReactContext': true,
},
module : {
loaders : [
{
test : /\.jsx?/,
include : APP_DIR,
loader : 'babel'
},
{
test: /\.scss$/,
loader: extractCSS.extract('style', 'css?modules=true!sass?sourceMap=true')
}
]
},
plugins: [
generateHtml,
extractCSS
]
};

module.exports = config;

关于css - 为什么 ExtractTextPlugin 通过插件创建一个空的 css 文件?为什么 sass 加载器在使用 Webpack 导入时提供空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41818738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com