2015-12-23 35 views
12

react-css-modules, webpack ve Hot Module Replacement ile bir Yanıtlama projesi kurmaya çalışıyorum. Her şey bir çekicilik gibi çalışıyor ama CSS sourcemaps'ın çalışmasını sağlayamıyorum.Kaynak modülleri React Css Modülleri için nasıl çalışır?

HMR'yi çalışmak için this guide'u takip ettim. Webpack diske yazdıktan sonra css dosyasını güncelleştirmek için bir BrowserSync kurulumunu içerir.

ExtractTextPlugin (-tepki css-modül tarafından önerildiği gibi) Ben css tüm ayıklamak için kullanın:

{ 
    test: /\.scss$/, 
    loader: ExtractTextPlugin.extract('style','css?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!sass') 
} 

Ama önerdiği gibi, sourcemaps bu değiştirirseniz here

loader: ExtractTextPlugin.extract('style', 'css?sourceMap!sass-loader outputStyle=expanded&sourceMap=true&sourceMapContents=true') 

Tarayıcı konsolumda şu hatayı alıyorum: "root" CSS module is undefined..

Örnek repoum here'u bulabilirsiniz, ancak geliştirme için kullanacağım tam web paketi yapılandırması.

var webpack = require('webpack'); 
var path = require('path'); 
var ExtractTextPlugin = require('extract-text-webpack-plugin'); 
var WriteFilePlugin = require('write-file-webpack-plugin').default; 

module.exports = { 
    entry: { 
    bundle: [ 
     'webpack/hot/dev-server', 
     'webpack-hot-middleware/client', 
     './index.js' 
    ] 
    }, 
    devtool: 'cheap-module-source-map', 
    debug: true, 
    devServer: devServer, 
    context: path.resolve(__dirname, './src'), 
    output: { 
    path: path.resolve(__dirname, './builds'), 
    filename: '[name].js', 
    publicPath: '/builds/' 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.OldWatchingPlugin(), 
    new WriteFilePlugin(), 
    new ExtractTextPlugin('[name].css', { 
     allChunks: true 
    }) 
    ], 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     loaders: ['react-hot', 'babel-loader'], 
     exclude: /node_modules/ 
     }, 
     { 
     test: /\.scss$/, 
     loader: ExtractTextPlugin.extract('style','css?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!sass') 
     } 
    ] 
    }, 
    resolve: { 
    extensions: ['', '.js', '.json'] 
    } 
}; 

Sourcemap nasıl çalışır?

+0

Ses çıkarılabilir, ama buna ne dersiniz? ExtractTextPlugin.extract ('style', 'css? SourceMap & modules & importLoaders = 1 & localIdentName = [name] __ [yerel] ___ [hash: base64: 5]! Sass? SourceMap') ' – Louy

+0

$ @ ## & $ ben .. bu gerçekten çalışıyor. Yemin ederim ki bunu denedim ... Yine de çok teşekkürler. Bunu bir cevap olarak ekleyebilir misiniz, böylece ödülünüzü ödüllendirebilirim? – Tieme

+0

Bazı belgeler de eklendi. https://github.com/gajus/react-css-modules/pull/72 :) – Tieme

cevap

8

bunu kullanın:

ExtractTextPlugin.extract('style','css?sourceMap&modules&importLoaders=1&localI‌​dentName=[name]__[local]___[hash:base64:5]!sass?sourceMap') 

yani hem css & sass yükleyiciler için sourceMap param ekleyin. sass-loader docs'da öyle söyledi.

2

Bu benim css modülleri kurdunuz nasıl:

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

Bu, reaktif-css-modülleri kullanmadığınız sürece veya bu modüllerin yeniden yüklenmesi gerekmediği sürece çalışacaktır. Bu durumlarda ExtractTextPlugin'e ihtiyacınız vardır. – Tieme

+0

@Tieme Bu doğru değil. Bu yanlış anlaşılmayı yaydığım için özür dilerim. Dokümanları (https://github.com/gajus/react-css-modules#webpack) güncelledim ve ilgili konudaki tartışma konusunu güncelledim (https://github.com/gajus/react-css-modules/issues/51 # issuecomment-181.660.058). – Gajus

+0

Teşekkürler! Sorun değil :) – Tieme