MiniCssExtractPlugin 公共路径不起作用
Posted
技术标签:
【中文标题】MiniCssExtractPlugin 公共路径不起作用【英文标题】:MiniCssExtractPlugin public path not working 【发布时间】:2018-12-05 22:03:27 【问题描述】:我正在使用 MiniCssExtractPlugin 在我的 react 应用程序中延迟加载 css 文件。
我已经为 MiniCssExtractPlugin 提供了 publicPath 选项,但它没有采用此选项值,而是采用 output.publicPath 选项。
config:
test: /\.(css)?$/,
use: [
loader : MiniCssExtractPlugin.loader,
options :
publicPath : '../'
,
'css-loader'
],
有什么帮助???
【问题讨论】:
【参考方案1】:好像你的not the only one confused, 52 cmets 关于如何做到这一点。 publicPath in html-webpack-plugin 的问题是类似的并且有所帮助。然而,最大的帮助来自于 npm run eject
退出 create-react-app 并检查 webpack.config.js
文件。
TL;DR:您需要在插件构造函数中指定保存路径。
new MiniCssExtractPlugin(
// Options similar to the same options in webpackOptions.output
filename: "assets/css/[name].css",
),
您可能需要重新考虑模块输出逻辑。
避免在 module.output.path
中指定嵌套路径,例如public/assets/js
,而是设置 root 目录:public
并设置 filename
键的嵌套:assets/js/[name].js
。
然后您可以在主module.output
中指定一个publicPath
,用于subdomains or CDN's 等。
最终的完整配置对我有用:
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const publicPath = '/';
module.exports =
entry: './_src/_js/index.js',
output:
filename: 'assets/js/[name].js',
path: path.resolve(__dirname, 'dist'),
publicPath: publicPath,
,
module:
rules: [
test: /\.css$/,
use: [
loader: MiniCssExtractPlugin.loader,
,
'css-loader',
],
,
test: /\.(png|svg|jpg|gif)$/,
use: [
loader: 'file-loader',
options:
name: 'assets/images/[name].[ext]',
,
,
]
,
test: /\.js$/,
exclude: /node_modules/,
use: ['babel-loader','eslint-loader']
,
],
,
plugins: [
new MiniCssExtractPlugin(
// Options similar to the same options in webpackOptions.output
// both options are optional
filename: "assets/css/[name].css",
),
new HtmlWebpackPlugin(
inject: true,
),
]
;
【讨论】:
如果目录结构发生变化,我如何更改相对于assets/css/
的资源 url。以上是关于MiniCssExtractPlugin 公共路径不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Webpack - MiniCssExtractPlugin 不提取文件
带有 sass-loader、MiniCssExtractPlugin 和 uikit 的 Webpack4