Добавить Sass (.scss) в извлеченный конфиг
Я хочу добавить поддержку .scss
в мое приложение, которое было создано с помощью create-реагировать-приложение.
Я извлек npm run eject
и установил необходимые зависимости: npm install sass-loader node-sass --save-dev
Внутри config/webpack.config.dev.js
я добавил к загрузчикам этот фрагмент:
{
test: /\.scss$/,
include: paths.appSrc,
loaders: ["style", "css", "scss"]
},
Итак, начало массива loaders теперь выглядит так:
loaders: [
// Process JS with Babel.
{
test: /\.(js|jsx)$/,
include: paths.appSrc,
loader: 'babel',
query: require('./babel.dev')
},
// "postcss" loader applies autoprefixer to our CSS.
// "css" loader resolves paths in CSS and adds assets as dependencies.
// "style" loader turns CSS into JS modules that inject <style> tags.
// In production, we use a plugin to extract that CSS to a file, but
// in development "style" loader enables hot editing of CSS.
{
test: /\.css$/,
loader: 'style!css!postcss'
},
// LOAD & COMPILE SCSS
{
test: /\.scss$/,
include: paths.appSrc,
loaders: ["style", "css", "scss"]
},
Теперь в моем jsx, когда я пытаюсь импортировать файл scss:
import './assets/app.scss';
Я получаю сообщение об ошибке:
Uncaught Error: не удается найти модуль "./assets/app.scss"
Так что мой конфиг должен быть неправильным, так как я не могу загрузить файлы .scss
. Как настроить config для загрузки файлов .scss
в извлеченный create-react-app
?
Ответы
Ответ 1
ОК, я нашел решение - изменилось с этого:
{
test: /\.scss$/,
include: paths.appSrc,
loaders: ["style", "css", "scss"]
},
:
{
test: /\.scss$/,
loaders: ['style', 'css', 'sass']
},
И теперь мои файлы .scss
загружаются!
Ответ 2
Проверьте первый загрузчик, сначала он получит все файлы и исключает другие файлы загрузчиков
loaders: [
{
exclude: [
/\.html$/,
/\.(js|jsx)$/,
/\.css$/,
/\.json$/,
/\.svg$/
],
loader: 'url',
query: {
limit: 10000,
name: 'static/media/[name].[hash:8].[ext]'
}
},
поэтому добавление
/\.sass$/,
/\.scss$/,
чтобы исключить, кажется, что исправлена та же проблема, что и у меня: D
Ответ 3
При попытке интегрировать sass в проект пустой реакции я использовал эту статью . Представленное там решение не сработало и получило аналогичную ошибку, как и у субъекта.
В моем случае замена style-loader
на require.resolve('style-loader')
помогла:
{
test: /\.scss$/,
include: paths.appSrc,
loaders: [require.resolve('style-loader'), require.resolve('css-loader'), require.resolve('sass-loader')]
},
Ответ 4
Вам, вероятно, придется использовать
include: paths.appSrc,
чтобы включить горячую перезагрузку webpack. Таким образом, фрагмент конфигурации может выглядеть как
{
test: /\.scss$/,
include: paths.appSrc,
loaders: ['style', 'css', 'sass']
},
Ответ 5
Для этого есть официальная интеграционная документация. Прочитайте adding-a-css-preprocessor-sass-less-etc
Ответ 6
Проверьте настройки загрузчика на наличие последних версий.
{
test: /\.scss$/,
use: [
"style-loader", // creates style nodes from JS strings
"css-loader", // translates CSS into CommonJS
"sass-loader" // compiles Sass to CSS
]
}
Ответ 7
согласно последней конфигурации [CRA]
:: webpack.config.dev.js ::
{
test: /\.css$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
},
},
{
loader: require.resolve('postcss-loader'),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
autoprefixer({
browsers: [
'>1%',
'last 4 versions',
'Firefox ESR',
'not ie < 9', // React does not support IE8 anyway
],
flexbox: 'no-2009',
}),
],
},
},
],
},
{
test: /\.scss$/,
loaders: [
require.resolve("style-loader"), // creates style nodes from JS strings
require.resolve("css-loader"), // transl ates CSS into CommonJS
require.resolve("sass-loader") // compiles Sass to CSS
]
},