SASS を使用すると、次のエラーが発生しますmap-get
。
ERROR in ./src/special.scss
Module build failed: ModuleBuildError: Module build failed: Unknown word (11:14)
9 |
10 | @mixin mediaquery($name) {
> 11 | @media #{map-get($breakpoints, $name)} {
| ^
12 | @content;
13 | }
14 | }
sass-loader
これは、と別のローダーの両方を使用した場合にのみ発生します。
これは PostCSS Loader が原因だと最初は思っていましたが、sass-loading が問題を引き起こし、使用時に scss を変換していないようcss-modules
です。
問題を示すサンプル リポジトリを作成しました: https://github.com/tiemevanveen/sass-css-components-fail-example。
さまざまなブランチを使用してテストできます。
master
: CSS モジュール + SASSpostcss
CSS モジュール + SASS + PostCSSlog-source
: CSS モジュール + SASS +カスタム ソース ロギング モジュールを使用no-css-modules
: SASS +カスタム ソース ロギング モジュール
最初と最後のブランチのみがエラーなしで実行されます。
sass-loader が何を返すかを確認するために log-source の例を作成しましたが、sass を変換していないように見えます(ただし、これはローダーの動作を誤解している可能性もあります)。
css モジュールを使用しない他の例は、正しく変換されたコードを示しています。
マスター ブランチ (postcss または別のカスタム ローダーなし) が正常に動作している理由がわかりません。
問題を提出しましたが、これは特定の問題であり、構成の問題である可能性があるため、StackOverflow でより多くの可能性があると考えています。これが私のwebpack構成です:
const webpack = require('webpack');
const path = require('path');
const autoprefixer = require('autoprefixer');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const WriteFilePlugin = require('write-file-webpack-plugin');
module.exports = {
devtool: 'source-source-map',
debug: true,
context: path.resolve(__dirname, './src'),
entry: {
app: './index.js'
},
output: {
path: path.resolve(__dirname, './static'),
filename: '[name].js',
publicPath: '/static/'
},
devServer: {
outputPath: path.resolve(__dirname, './static'),
},
plugins: [
new webpack.NoErrorsPlugin(),
new ExtractTextPlugin('[name].css'),
new WriteFilePlugin()
],
module: {
loaders: [
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style-loader', [
'css?modules&importLoaders=1&localIdentName=[path]_[name]_[local]',
// 'postcss-loader',
'sass'
])
},
// + js loader
]
},
postcss: [
autoprefixer({ browsers: ['> 0.5%'] })
],
resolveLoader: {
fallback: [
path.resolve(__dirname, 'loaders'),
path.join(process.cwd(), 'node_modules')
]
},
resolve: {
extensions: ['', '.js', '.json'],
}
};