我尝试将多个SCSS文件处理到Webpack(3.6.0)中的单个外部CSS文件中,除了我遇到有关解析@import语句的问题。
条目index.js包含:
import './styles/main.scss';
条目SCSS:
@import 'reset.scss';
@import 'global.scss';
@import 'fonts.scss';
@import 'system.scss';
当前的网络包:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: {
app: './src/index.js'
},
context: path.resolve(__dirname),
output: {
path: path.resolve(__dirname, 'public'),
filename: 'bundle.js',
},
plugins: [
new CleanWebpackPlugin(['app']),
new HtmlWebpackPlugin({
title: 'Minimum-Viable',
filename: 'index.html',
template: './public/index.html',
}),
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
'es2015',
'react',
],
plugins: ['transform-class-properties'],
},
},
},
{
test: /\.scss$/,
include: [
path.resolve(__dirname, 'styles')
],
use: [
{loader:'style-loader'},
{loader:'css-loader'},
{loader:'sass-loader'}
]
},
],
},
resolve: {
extensions: ['.js','.scss']
}
};
抛出的错误是:
> ./src/styles/main.scss中的错误模块解析失败:意外的字符' @' (1:0)您可能需要适当的加载程序来处理此文件类型。 | @import' reset.scss';
感激地收到任何指示。
答案 0 :(得分:4)
我设法重现错误,似乎来自:
include: [
path.resolve(__dirname, 'styles')
],
路径是问题,因为加载程序会在/styles
中搜索./styles
,但会查看您的入口点:
entry: {
app: './src/index.js'
},
实际应该是./src/styles
所以:
include: [
path.resolve(__dirname, 'src', 'styles')
],
答案 1 :(得分:1)
使用:
include: [
path.resolve(__dirname, 'styles')
],
您指示webpack仅对驻留在styles
文件夹中的文件使用您的加载链。
reset.scss
看起来像通常存储在node_module
中的节点依赖项,SASS
选项将其排除在include
处理之外。
尝试删除您的SASS include
选项或对其进行扩展,以便包含node_folder
或您的样式导入的特定模块。
答案 2 :(得分:1)
您是否尝试过提取文字网络包插件
https://github.com/webpack-contrib/extract-text-webpack-plugin
基本上它会收集你所有的样式文件(在你的代码中导入)并将其打包到捆绑的css中,然后你可以将它们链接到你的html。
答案 3 :(得分:0)
我基本上和你有相同的配置,除了两件事:
{
test: /\.scss$/,
exclude: /node_modules/,
use: ["style-loader", "css-loader", "sass-loader"]
}
如果您的webpack与项目根目录位于不同的文件夹中,__dirname
可能无法解决您的问题。您可能需要一起删除该语句或将其更改为process.cwd()
。我可以给你另一个提示,可能是你错过了node-sass
包。其次,您可能没有使用正确的语法用于webpack版本2或3,如use
键所示。
答案 4 :(得分:0)
你有这样的尝试吗?
index.js:
import './styles/main.scss';
import './styles/reset.scss';
import './styles/global.scss';
import './styles/fonts.scss';
import './styles/system.scss';