如何使用 SCSS 设置 React 应用程序? (错误)
How to setup react app with SCSS? (Errors)
我正在尝试设置我的 React 项目,以便我可以使用 SCSS 格式的 SASS。
这是我的 webpack.config.dev.js:
{
test: /\.scss$/,
exclude: /node_modules/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
},
},
{
loader: require.resolve('sass-loader'),
}
]
}
我以两种不同的方式将 scss 文件导入我的 jsx:
import './index.scss';
import css from './ModalWrapper.scss';
当我 运行 应用程序时,我目前收到错误:
./src/index.scss
Module build failed:
body {
^
Invalid CSS after "m": expected 1 selector or at-rule, was "module.exports = __"
in /pathtoapp/web/src/index.scss (line 1, column 1)
在我看来,那个 React 正在尝试将 SCSS 解释为 CSS,这应该有效。另外,react 认为 body 无效 CSS。在那里,我相信 CSS 或 SCSS 都没有被正确加载。
如有任何帮助,我们将不胜感激。这个问题有很多悬而未决的问题。
如果您使用的是 Webpack 3,请将此添加到 module.rules
{
test: /\.scss$/,
loader: [
require.resolve('style-loader'),
require.resolve('css-loader'),
require.resolve('sass-loader'),
]
},
然后添加文件加载器并确保将 .scss
添加到键 exclude
的数组中,像这样
{
loader: require.resolve('file-loader'),
// Exclude `js` files to keep "css" loader working as it injects
// it's runtime that would otherwise processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.js$/, /\.html$/, /\.json$/, /\.scss$/,],
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
}
当然,请确保您 package.json 中有 style-loader
、sass-loader
、css-loader
和 file-loader
。使用最新版本的 create-react-app
.
时,此代码片段对我有用
这就是最终对我有用的东西:
{
test: /\.scss$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader',
options: {
modules: true,
sourceMap: true,
localIdentName: "[local]___[hash:base64:5]",
},
}, {
loader: 'sass-loader',
options: {
outputStyle: "expanded",
sourceMap: true,
},
}]
},
我相信其他答案也一样好,但为了最大程度的简洁,这对我有用(我删除了一些内部 webpack.config.dev.js 可能由 create react 人员做出的评论):
module: {
strictExportPresence: true,
rules: [
{
test: /\.scss/,
use: ['style-loader','css-loader', 'sass-loader']
},...
我不知道这是否重要,但我把它放在了最上面。另外,是的,确保如上所述将 scss 文件添加到排除的数组中。
我正在尝试设置我的 React 项目,以便我可以使用 SCSS 格式的 SASS。
这是我的 webpack.config.dev.js:
{
test: /\.scss$/,
exclude: /node_modules/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
},
},
{
loader: require.resolve('sass-loader'),
}
]
}
我以两种不同的方式将 scss 文件导入我的 jsx:
import './index.scss';
import css from './ModalWrapper.scss';
当我 运行 应用程序时,我目前收到错误:
./src/index.scss
Module build failed:
body {
^
Invalid CSS after "m": expected 1 selector or at-rule, was "module.exports = __"
in /pathtoapp/web/src/index.scss (line 1, column 1)
在我看来,那个 React 正在尝试将 SCSS 解释为 CSS,这应该有效。另外,react 认为 body 无效 CSS。在那里,我相信 CSS 或 SCSS 都没有被正确加载。
如有任何帮助,我们将不胜感激。这个问题有很多悬而未决的问题。
如果您使用的是 Webpack 3,请将此添加到 module.rules
{
test: /\.scss$/,
loader: [
require.resolve('style-loader'),
require.resolve('css-loader'),
require.resolve('sass-loader'),
]
},
然后添加文件加载器并确保将 .scss
添加到键 exclude
的数组中,像这样
{
loader: require.resolve('file-loader'),
// Exclude `js` files to keep "css" loader working as it injects
// it's runtime that would otherwise processed through "file" loader.
// Also exclude `html` and `json` extensions so they get processed
// by webpacks internal loaders.
exclude: [/\.js$/, /\.html$/, /\.json$/, /\.scss$/,],
options: {
name: 'static/media/[name].[hash:8].[ext]',
},
}
当然,请确保您 package.json 中有 style-loader
、sass-loader
、css-loader
和 file-loader
。使用最新版本的 create-react-app
.
这就是最终对我有用的东西:
{
test: /\.scss$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader',
options: {
modules: true,
sourceMap: true,
localIdentName: "[local]___[hash:base64:5]",
},
}, {
loader: 'sass-loader',
options: {
outputStyle: "expanded",
sourceMap: true,
},
}]
},
我相信其他答案也一样好,但为了最大程度的简洁,这对我有用(我删除了一些内部 webpack.config.dev.js 可能由 create react 人员做出的评论):
module: {
strictExportPresence: true,
rules: [
{
test: /\.scss/,
use: ['style-loader','css-loader', 'sass-loader']
},...
我不知道这是否重要,但我把它放在了最上面。另外,是的,确保如上所述将 scss 文件添加到排除的数组中。