2015-12-23 3 views
12

Ich versuche ein React-Projekt mit react-css-modules, webpack und Hot Module Replacement einzurichten. Alles funktioniert wie ein Zauber, aber ich kann die CSS-Quellkarten nicht zum Laufen bringen.Wie bekomme ich Quellmaps für React Css Module?

Ich folgte this guide, um HMR arbeiten zu lassen. Es beinhaltet ein BrowserSync-Setup, um die CSS-Datei zu aktualisieren, nachdem Webpack sie auf die Festplatte geschrieben hat.

ich (wie durch reagieren-CSS-Module vorgeschlagen), um die ExtractTextPlugin alle CSS zu extrahieren:

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

Aber wenn ich ändern, um dies zu sourcemaps, schlug als here

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

Ich bekomme den Fehler: "root" CSS module is undefined. in meiner Browser-Konsole.

Sie können mein Beispiel Repo here finden, aber hier ist die vollständige Webpack-Konfiguration, die ich für die Entwicklung verwenden.

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'] 
    } 
}; 

Wie funktioniert die Quellkarte?

+0

Klingt vielleicht albern, aber was ist damit? 'ExtractTextPlugin.extract ('style', 'css? SourceMap & modules & importLoaders = 1 & localIdentName = [name] __ [local] ___ [hash: base64: 5]! Sass? SourceMap')' – Louy

+0

$ @ ## & $ me .. das ist in der Tat funktioniert. Ich würde schwören, dass ich das versucht habe ... Trotzdem vielen Dank. Könnten Sie das vielleicht als Antwort hinzufügen, damit ich Ihnen das Kopfgeld belohnen kann? – Tieme

+0

Eine Dokumentation hinzugefügt. https://github.com/gajus/react-css-modules/pull/72 :) – Tieme

Antwort

8

verwenden:

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

heißt fügen Sie den sourceMap param auf beide css & sass Lader. So hieß es in sass-loader docs.

2

Dies ist, wie ich meine CSS-Module eingerichtet haben:

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

Das wird so lange funktionieren, wie Sie keine react-css-Module verwenden oder nicht brauchen, diese Module neu zu laden. In diesen Fällen benötigen Sie das ExtractTextPlugin. – Tieme

+0

@Tieme Das ist nicht wahr. Ich entschuldige mich für die Verbreitung dieses Missverständnisses. Ich aktualisierte die Dokumente (https://github.com/gajus/react-css-modules#webpack) und aktualisierte den Diskussions-Thread zum verwandten Thema (https://github.com/gajus/react-css-modules/issues/51 # issementcomment-181660058). – Gajus

+0

Danke! Kein Problem :) – Tieme

Verwandte Themen