2016-10-17 60 views
0

我想在内部使用css模块反应,但它不工作。css模块对象导入返回空

日志这个代码:

import React from 'react' 
import styles from '../../css/test.css' 

class Test extends React.Component { 
    render() { 
     console.log(styles) 
     return (
      <div className={styles.app}> 
       <p>This text will be blue</p> 
      </div> 
     ); 
    } 
} 

export default Test 

返回Object {}

和渲染代码是标签没有类:

<div><p>This text will be blue</p></div> 

CSS代码可在现场,这里是我的test.css:

.test p { 
    color: blue; 
} 

如果我改变了div来上课=“测试”,的对变化的颜色为蓝色

这里是我的webpack.config.js

var path = require('path') 
var webpack = require('webpack') 
var HappyPack = require('happypack') 
var BundleTracker = require('webpack-bundle-tracker') 
var path = require('path') 
var ExtractTextPlugin = require("extract-text-webpack-plugin") 

function _path(p) { 
    return path.join(__dirname, p); 
} 

module.exports = { 

    context: __dirname, 
    entry: [ 
     './assets/js/index' 
    ], 

    output: { 
     path: path.resolve('./assets/bundles/'), 
     filename: '[name].js' 
    }, 

    devtool: 'inline-eval-cheap-source-map', 

    plugins: [ 
     new BundleTracker({filename: './webpack-stats.json'}), 
     new webpack.ProvidePlugin({ 
      $: 'jquery', 
      jQuery: 'jquery', 
      'window.jQuery': 'jquery' 
     }), 
     new HappyPack({ 
      id: 'jsx', 
      threads: 4, 
      loaders: ["babel-loader"] 
     }), 
     new ExtractTextPlugin("[name].css", { allChunks: true }) 

    ], 

    module: { 
     loaders: [ 

      { 
       test: /\.css$/, 
       include: path.resolve(__dirname, './assets/css/'), 
       loader: ExtractTextPlugin.extract("style-loader", "css-loader!resolve-url-loader?modules=true&localIdentName=[name]__[local]___[hash:base64:5]") 
      }, 

      { 
       test: /\.scss$/, 
       include: path.resolve(__dirname, './assets/css/'), 
       loader: ExtractTextPlugin.extract("style-loader", "css-loader!resolve-url-loader!sass-loader?modules=true&localIdentName=[name]__[local]___[hash:base64:5]") 
      }, 

      { 
       test: /\.jsx?$/, 
       include: path.resolve(__dirname, './assets/js/'), 
       exclude: /node_modules/, 
       loaders: ["happypack/loader?id=jsx"] 
      }, 
      { 
       test: /\.png$/, 
       loader: 'file-loader', 
       query: { 
        name: '/static/img/[name].[ext]' 
       } 
      } 
     ] 
    }, 

    resolve: { 
     modulesDirectories: ['node_modules'], 
     extensions: ['', '.js', '.jsx'], 
     alias: { 
      'inputmask' : _path('node_modules/jquery-mask-plugin/dist/jquery.mask') 
     }, 
    } 
} 

谁能帮助我?

在此先感谢。

+0

您是否找到解决方案? –

+0

是的,我会尽快更新 –

回答

0

看起来像你路过的CSS-装载机PARAMS的决心,网址装载机:

"css-loader!resolve-url-loader?modules=true&localIdentName=[name]__[local]___[hash:base64:5]" 

应该是:

"css-loader?modules=true&localIdentName=[name]__[local]___[hash:base64:5]&importLoaders=1!resolve-url-loader" 
+0

这不起作用 –

0

很多,因为这个问题通过的时间,所以我的WebPack与其他技术进行了多次更新。

此的WebPack配置工作:

... 
module.exports = { 
    entry, 
    output: { 
    filename: '[name].js', 
    path: path.resolve(__dirname, 'dist'), 
    publicPath: '/' 
    }, 
    devtool: 
    process.env.NODE_ENV === 'production' ? 'source-map' : 'inline-source-map', 

    module: { 
    rules: [ 
     { 
     test: /\.jsx?$/, 
     include: path.resolve(__dirname, './app/view/'), 
     exclude: /node_modules/, 
     loader: 'babel-loader' 
     }, 
     { 
     test: /\.pcss$/, 
     include: path.resolve(__dirname, './app/view/'), 
     use: [ 
      { 
      loader: 'style-loader' 
      }, 
      { 
      loader: 
       'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]' 
      }, 
      { 
      loader: 'postcss-loader', 
      options: { 
       plugins: function() { 
       return [ 
        require('postcss-import'), 
        require('postcss-mixins'), 
        require('postcss-cssnext')({ 
        browsers: ['last 2 versions'] 
        }), 
        require('postcss-nested'), 
        require('postcss-brand-colors') 
       ]; 
       } 
      } 
      } 
     ], 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.(png|svg|jpg|webp)$/, 
     use: { 
      loader: 'file-loader' 
     } 
     } 
    ] 
    }, 
    resolve: { 
    extensions: ['.js', '.jsx'], 
    modules: [path.resolve(__dirname, 'node_modules')] 
    }, 
    plugins 
}; 

我想,有与旧版本在的WebPack这一行的一个问题:

'css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]' 

尝试importLoaders和importLoader

你可以请参阅我的repo

+0

我在Jest有这个问题。请参阅https://stackoverflow.com/questions/47292537/imported-styles-object-is-empty-in-jest –