【问题标题】:Webpack is mangling my .scss stylesheet classesWebpack 正在修改我的 .scss 样式表类
【发布时间】:2016-05-08 13:27:51
【问题描述】:

我正在使用带有 npm 和 react.js 的 webpack,并且我有我的 style.scss 样式表来控制我的样式等。我知道由于“webpack 的东西”它被合并到一个大的 .css 文件中,但我'总是无法正确使用类/ID。我发现了原因。这在我的 style.scss 表中:

/* List items when hovered. */
ul li.hovered{
    background-color: #F8F8F8;
    color: #7B8585;
}

变成:

/* List items when hovered. */
ul li.style__hovered___j0Fpj {
  background-color: #F8F8F8;
  color: #7B8585; }

在合并的 style.css 文件中。这解释了为什么如果我尝试手动设置一个类,例如$('#id').toggle("hovered") 不起作用,但 $('#id').toggle("style__hovered___j0Fpj") 起作用。这个奇怪的字符串会持续刷新页面,所以我认为在我的代码中使用它是“安全的”,但是为什么 webpack 会像这样混淆类名?有没有办法阻止它这样做?还是这就是它的“本意”?

这是我的 webpack 配置:

var path = require('path');
var webpack = require('webpack');
var autoprefixer = require('autoprefixer');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'index.js',
    publicPath: '/static/'
  },
  resolve: {
    extensions: ['', '.jsx', '.scss', '.js', '.json'],
    modulesDirectories: [
      'node_modules',
      path.resolve(__dirname, './node_modules')
    ]
  },
  node: {
    console: true,
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new ExtractTextPlugin('style.css')
  ],
  module: {
    noParse: /node_modules\/json-schema\/lib\/validate\.js/,
    loaders: [
      {
        test: /\.js$/,
        loaders: ['react-hot', 'babel'],
        include: path.join(__dirname, 'src')
      },
      { test: /\.png$/, loader: "url-loader?limit=100000" },
      { test: /\.jpg$/, loader: "file-loader" },
      {
        test: /(\.scss|\.css)$/,
        loader: ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass?sourceMap!toolbox')
      },
      { test: /\.json$/, loader: "json-loader" }
    ]
  },
  postcss: [autoprefixer]
};

【问题讨论】:

  • Webpack 本身不会更改您的 css 类......您在配置中拥有的一些“webpack 东西”可能会。如果您发布您的 webpack 配置,我们可以为您提供帮助。
  • 添加了我的 webpack.config.js 文件。
  • 尝试将ExtractTextPlugin.extract('style', 'css?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!postcss!sass?sourceMap!toolbox')更改为ExtractTextPlugin.extract('style', 'css?sourceMap!sass?sourceMap!toolbox')
  • 去掉了时髦的名字,但在这个过程中也毁了我一半的风格。至少我知道是什么原因造成的。
  • 太棒了,你可以弄清楚其余的 :)

标签: javascript html css node.js webpack


【解决方案1】:

webpack 配置中的 Css 模块是转换类名的模块。这是一个非常酷的模块,但如果您想正确使用它,请阅读文档https://github.com/css-modules/css-modules 更好地阅读。否则删除它

【讨论】:

  • 所以,我在 cmets 中的解决方案的主要问题是它删除了我部分覆盖的 react-toolbox 组件的内置样式;它使它们成为普通的无样式按钮。有什么办法可以找回来吗?我真的只是希望样式不要被重命名...
  • 啊,我没有意识到您正在使用 react-tools 组件。正如他们在他们的文档中所说,它们由 css-modules 提供支持,所以我认为删除它并不是一件容易的事。也许尝试按照他们的建议覆盖预定义的类github.com/react-toolbox/…
猜你喜欢
  • 1970-01-01
  • 2021-08-13
  • 2021-08-27
  • 2020-03-27
  • 2017-10-16
  • 2010-10-02
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多