Nai*_*iru 13 javascript css webpack css-loader
我正在尝试运行构建的 webpack-dev-server,但每次都失败并出现以下错误:
ERROR in ./src/style.css (./node_modules/css-loader/dist/cjs.js!./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./src/style.css)
Module build failed (from ./node_modules/css-loader/dist/cjs.js):
CssSyntaxError
(1:1) Unknown word
> 1 | var api = require("!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
| ^
2 | var content = require("!!../node_modules/css-loader/dist/cjs.js!./style.css");
3 |
Run Code Online (Sandbox Code Playgroud)
我的 webpack.dev.js 看起来像这样:
const path = require('path');
const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
entry: './src/index.js',
mode: 'development',
devtool: 'inline-source-map',
optimization: {
usedExports: true,
},
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
],
},
{
test: /\.(png|svg|jpg|gif)$/,
use: [
'file-loader',
],
},
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
],
},
});
Run Code Online (Sandbox Code Playgroud)
在我的 index.js 中使用它时出现错误:
import './style.css';
Run Code Online (Sandbox Code Playgroud)
许多解决方案都建议了 style-loader 和 css-loader 的顺序,但据我所知,它的顺序是正确的。我究竟做错了什么?
小智 2
当我尝试同时使用 thestyle-loader和 the时,我遇到了同样的错误MiniCssExtractPlugin。你的例子使用了 webpack merge,所以我假设你也有一个带有额外 CSS 规则的 webpack.common.js ?
就我而言,解决的方法如下:
我的 webpack.dev.config.js 中有以下规则:
module: {
rules: [
{
test: /\.(sass|scss)$/,
use: [
"style-loader",
"css-loader",
"postcss-loader",
{
loader: "sass-loader",
options: {
// Prefer `dart-sass`
implementation: require("sass"),
},
},
],
},
],
},
Run Code Online (Sandbox Code Playgroud)
我的 webpack.prod.config.js 中的以下内容:
module: {
rules: [
{
test: /\.(sass|scss)$/,
use: [
MiniCssExtractPlugin.loader,
"css-loader",
"postcss-loader",
{
loader: "sass-loader",
options: {
// Prefer `dart-sass`
implementation: require("sass"),
},
},
],
},
],
},
Run Code Online (Sandbox Code Playgroud)
您还可以使用三元运算符来检查是否mode === 'production'并将其保留在一个文件中,但我更喜欢有两个单独的文件,以使其更具可读性,以防 webpack 配置变得太大。
我还尝试将css-loader,postcss-loader和移动sass-loader到同一个 webpack.common.js 文件,但由于某种原因它不起作用。
不确定这是否可能是导致您错误的原因,但它在我的用例中修复了它,所以现在我使用开发环境的样式加载器和用于编译生产的插件。
这适用于 webpack 5 和 Node 16
| 归档时间: |
|
| 查看次数: |
1904 次 |
| 最近记录: |