2015-06-19 18 views
20

Próbuję uzyskać pliki * .scss być obsługiwane w mojej konfiguracji WebPACK ale wciąż otrzymuję następujący błąd podczas uruchamiania polecenia WebPack produkcji:Sass ładowarka nie działa w WebPacka

ERROR in ./~/css-loader!./~/sass-loader!./app/styles.scss 
Module build failed: TypeError: Cannot read property 'sections' of null 
at new SourceMapConsumer (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js:23:21) 
at PreviousMap.consumer (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/lib/previous-map.js:37:34) 
at new Input (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/lib/input.js:42:28) 
at parse (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/lib/parse.js:17:17) 
at new LazyResult (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/lib/lazy-result.js:54:47) 
at Processor.process (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/node_modules/postcss/lib/processor.js:30:16) 
at processCss (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/lib/processCss.js:168:24) 
at Object.module.exports (/Users/sean/Development/playground/webpack.sass.test/node_modules/css-loader/lib/loader.js:21:15) 
@ ./app/styles.scss 4:14-117 

mogę” t dla życia mnie zrozumieć dlaczego. To bardzo prosta konfiguracja.

Stworzyłem udział skrzynki referencyjnej z minimalnym ilustrując w ten sposób: https://www.dropbox.com/s/quobq29ngr38mhx/webpack.sass.test.zip?dl=0

Rozpakuj ten następnie uruchomić:

npm install 
webpack 

Oto mój plik webpack.config.js:

var path = require('path') 
var webpack = require('webpack') 

module.exports = { 
    devtool: 'eval', 
    entry: [ 
    './app' 
    ], 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'index.js', 
    publicPath: '/dist/' 
    }, 
    plugins: [ 
    new webpack.NoErrorsPlugin() 
    ], 
    resolve: { 
    extensions: ['', '.js'] 
    }, 
    module: { 
    loaders: [{ 
     test: /\.scss$/, 
     loader: 'style-loader!css-loader!sass-loader' 
    }] 
    } 
} 

Plik indeksu.js:

require('./styles.scss'); 

alert('foo bar baz'); 

a plik styles.scss:

body { 
    background-color: #000; 
} 

Wydaje się przestrzegać zaleceń stronie dokumentacji Sass-loader, ale nie mogę go uruchomić.

:(

Informacja o moim otoczeniu:

node - 0.12.4 
npm - 2.10.1 
os - OS X Yosemite 
+0

Mam ten sam problem – dreampulse

Odpowiedz

22

Udało mi się uzyskać inne obejście problemu, które nie wymaga edytowania bibliotek programu css-loader w moim katalogu npm_modules (zgodnie z odpowiedzią @ chriserik).

Jeśli dodasz "? SourceMap" do programu ładującego sas, program ładujący css wydaje się obsługiwać dane wyjściowe.

Oto moja konfiguracja aktualizowane:

var path = require('path') 
var webpack = require('webpack') 

module.exports = { 
    devtool: 'eval', 
    entry: [ 
    './app' 
    ], 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'index.js', 
    publicPath: '/dist/' 
    }, 
    plugins: [ 
    new webpack.NoErrorsPlugin() 
    ], 
    resolve: { 
    extensions: ['', '.js'] 
    }, 
    module: { 
    loaders: [{ 
     test: /\.scss$/, 
     loader: 'style!css!sass?sourceMap' 
    }] 
    } 
} 

PS: Nawet rozszerzyłem ten test, żeby uwzględnić kompas-mixiny, i to też zadziałało.

+1

Jestem pewien, że większość będzie o tym wiedziała, ale ponieważ korzystałem już z includePaths, to właśnie dodałem sourceMap {test: /\.scss$/, loader: 'style! Css! Sass-loader?' + JSON.stringify ({includePaths: [path.resolve (__ dirname, "app/design/_sass")], sourceMap: true})}, ' – MichaelStoner

+2

Po prostu trochę smutno, że trzeba robić dziwne rzeczy, takie jak ten aby działało. Pracowałem dla mnie po zastosowaniu poprawki, więc dziękuję za opublikowanie odpowiedzi, ale wciąż sprawia, że ​​się boję. – hendrikswan

+0

świetnie! uratował mój dzień dzięki człowiekowi :) – maverickosama92

5

po ten sam problem, znalazłem to: https://github.com/webpack/css-loader/issues/84

Wydaje się, że rozwiązaniem jest teraz ręcznie zmodyfikować linie 17- 19 of /node_modules/css-loader/lib/loader.js z

if(map && typeof map !== "string") { 
    map = JSON.stringify(map); 
} 

Naprawiło to problem dla mnie.

+0

genialny, dzięki za to! – ctrlplusb

+1

Wygląda na to, że te linie stały się częścią programu loader.js w wersji rozproszonej. – Micros

0

Problem można rozwiązać, ustawiając opcję source-map na wartość true (jak widać w innych odpowiedziach).

Ale w przypadku znalezienia opcji niechcianego przejścia w ciągu zapytania istnieje alternatywa;

do konfiguracji programu ładującego Sass można utworzyć właściwość sassLoader w obiekcie WebPack config:

module.exports = { 
    devtool: 'eval', 
    entry: [ 
    './app' 
    ], 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'index.js', 
    publicPath: '/dist/' 
    }, 
    plugins: [ 
    new webpack.NoErrorsPlugin() 
    ], 
    resolve: { 
    extensions: ['', '.js'] 
    }, 
    module: { 
    loaders: [{ 
     test: /\.scss$/, 
     loader: 'style!css!sass' 
     // loader: ExtractPlugin.extract('style', 'css!sass'), 
    }] 
    }, 
    sassLoader: { 
    sourceMap: true 
    }, 
} 
+0

Od Webpack 2 niestandardowe właściwości są niedozwolone: ​​\ musisz podać opcję w wtyczce lub loader: –

Powiązane problemy