2016-10-17 7 views
0

Я пытаюсь использовать модули css внутри, реагируя, но он не работает.css modules object import возвращает пусто

Бревно этого кода:

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 

возвращает объект {}

и тонированный код теги, не имеющий класса:

<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

Да, я обновлю ASAP –

ответ

0

Похоже, ваш прохождение CSS-погрузчик Params к Resolve-url-погрузчик:

"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]' 

Try importLoaders и importLoader

Вы можете см. мой repo тоже.

+0

У меня есть эта проблема в Jest. См. Https://stackoverflow.com/questions/47292537/imported-styles-object-is-empty-in-jest –

 Смежные вопросы

  • Нет связанных вопросов^_^