我在webpack 4.44.2上工作,当我转换到webpack5.0.0时遇到此错误
./src/assets/sass/styles中的错误。scss模块构建失败(来自./node_modules/mini-css-extract-plugin/dist/loader.js):错误:在此浏览器中不支持自动公共路径,其位置为E:\maktab\控制面板\newcontrol\final-control\node_modules\css-loader\dist\cjs.js!
错误来自fonts.scss中的字体文件bath
@font-face {
font-family: "Janna LT";
src: local("Janna LT"), url(../fonts/janna.woff) format("woff");
font-weight: normal;
}
@font-face {
font-family: "Janna LT";
src: local("Janna LT"), url(../fonts/janna-bold.woff) format("woff");
font-weight: bold;
}
我的源代码结构https://i.stack.imgur.com/vKyfW.png
分布式结构https://i.stack.imgur.com/mLgmF.png
webpack.config.js
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: {
'main': './src/index.js',
},
output: {
path: path.join(__dirname, "/dist"),
filename: '[name].js',
},
devServer: {
contentBase: path.join(__dirname, "/dist"),
port: 8087,
writeToDisk: true,
overlay :true
},
module: {
rules: [
{
test: /\.html$/,
use: [
{
loader: "html-loader",
}
]
},
{
test: /\.(sa|sc|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader'
]
},
{
test: /\.(png|svg|jpe?g|gif)$/,
exclude: /fonts/,
use: [
{
loader: "file-loader",
options: {
name: '[name].[ext]',
outputPath: "/assets/images",
}
}
]
},
{
test: /\.(svg|eot|woff|woff2|ttf)$/,
exclude: /images/,
use: [
{
loader: "file-loader",
options: {
name: '[name].[ext]',
outputPath: "assets/fonts",
}
}
]
},
]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
filename: "index.html",
template: "./src/index.html",
chunks: ['main']
}),
new MiniCssExtractPlugin({filename: "assets/css/styles.css"}),
new OptimizeCSSAssetsPlugin({}),
]
}
styles.scss
@import "base/fonts";
@import "base/global";
@import "base/typography";
@import "base/links";
@import "components/components";
@import "components/demo";
index.js
import './assets/sass/styles.scss';
import 'normalize.css/normalize.css';
console.log("hellow from webpack5");
9条答案
按热度按时间2izufjch1#
建议的解决方案对我不起作用,但是,我发现将
publicPath
设置为空字符串可以解决这个问题。lnlaulya2#
我遇到了同样的问题。我的代码编译到dist-folder中,没有任何进一步的结构。下面的代码对我来说很简单,因为我需要一个空路径。
你也可以疯狂地做这样的事情:
详细信息请访问:https://webpack.js.org/plugins/mini-css-extract-plugin/#the-publicpath-option-as-function
iih3973s3#
此错误是由mini-css-extract-plugin 1.3.8及更低版本与Webpack 5结合使用时出现的错误引起的。当样式表使用
url(...)
引用资源且未在Webpack配置中显式设置publicPath
选项时,会触发此错误。我花时间在此重现并报告了该问题:https://github.com/webpack-contrib/mini-css-extract-plugin/issues/707
昨天发布了1.3.9版,其中包含了此问题的修复程序。您应该可以通过升级来解决此错误。
lc8prwob4#
您可以尝试以下方法:
u4vypkhs5#
在你的webpack.config.js里面,你必须按照下面的方式来做,要么按照下面的方式来使用环境变量,要么使用它将要使用的根。
//step-1常量ASSET_PATH =进程.环境.ASSET_PATH||“/”;
//step-2内部输出对象如下:公共路径:资产路径
//step-3内部插件如下:“进程环境资产路径”:(ASSET_PATH)中的一个参数。
有关更多信息,请参阅此处,https://webpack.js.org/guides/public-path/
e5nszbig6#
我认为将
publicPath
添加到MiniCssExtractPlugin.loader
的options
中会有所帮助参考:mini-css-extract-plugin
368yc8dk7#
我也得到了同样的错误,而加载图像使用'文件加载器'。我只提供了outputPath。但后来我也提供了公共路径与相同的值,它工作。
outputPath:告诉在哪里放置图像/文件。x1c 0d1x
publicPath:html中img元素的src="”中插入的路径。
因此两者的路径应该相同。
yhived7q8#
注意
index.html
中<script>
的标签,该标签的类型是default,但不是module
工作
创建错误
bybem2ql9#
我只在第三方网站上分发一个带有脚本标记的React应用程序,所以我使用
style-loader
,而不是发出一个单独的CSS文件。我解决这个问题的方法是在生产Webpack配置中定义一个
output.publicPath
,然后升级到最新的Webpack版本。