node.js cli Sass loader не работает в веб-пакете



node-sass cli (3)

Проблема решается установкой для параметра source-map true (как видно из других ответов).

Но в случае, если вы найдете беспорядочные параметры передачи в строке запроса, есть альтернатива;

для настройки загрузчика sassLoader вы можете создать свойство sassLoader в объекте конфигурации 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'
      // loader: ExtractPlugin.extract('style', 'css!sass'),
    }]
  },
  sassLoader: {
    sourceMap: true
  },
}

Я пытаюсь получить файлы * .scss, которые будут поддерживаться в конфигурации моего веб-пакета, но я продолжаю получать следующую ошибку при запуске команды сборки веб-пакета:

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

Я не могу на всю жизнь понять, почему. Это очень простая настройка.

Я создал общий ресурс Dropbox с минимумом, иллюстрирующим это: https://www.dropbox.com/s/quobq29ngr38mhx/webpack.sass.test.zip?dl=0

Распакуйте это и запустите:

npm install
webpack

Вот мой файл 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'
    }]
  }
}

И файл записи index.js:

require('./styles.scss');

alert('foo bar baz');

И файл styles.scss:

body {
  background-color: #000;
}

Кажется, что он следует рекомендациям сайта документации sass-loader, но я не могу запустить его.

:(

Информация о моей среде:

node - 0.12.4
npm  - 2.10.1
os   - OS X Yosemite

Answer #1

После того, как возникла та же проблема, я нашел это: https://github.com/webpack/css-loader/issues/84

По-видимому, решение на данный момент состоит в том, чтобы вручную изменить строки 17-19 из /node_modules/css-loader/lib/loader.js с помощью

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

Это решило проблему для меня.


Answer #2

Мне удалось найти другой обходной путь, который не включает редактирование библиотек css-loader в моем каталоге npm_modules (согласно ответу @chriserik).

Если вы добавите '? SourceMap' в загрузчик sass, загрузчик css, похоже, обработает вывод.

Вот моя обновленная конфигурация:

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 Я даже расширил этот тест, включив в него компас-миксины, и это тоже сработало.





webpack