MiniCssExtractPlugin公共路径不起作用

Nr.*_*Nr. 6 webpack-4 mini-css-extract-plugin

我正在使用MiniCssExtractPlugin在我的react应用程序中延迟加载css文件.

我已经为MiniCssExtractPlugin提供了publicPath选项,但它没有采用此选项值,它采用了output.publicPath选项.

config:
   {
     test: /\.(css)?$/,
     use: [{
            loader : MiniCssExtractPlugin.loader,
            options : {
              publicPath : '../'
            }
          },
          'css-loader'
        ],

     }
Run Code Online (Sandbox Code Playgroud)

任何帮助???

san*_*oon 17

好像你不是唯一一个混淆的人,52评论如何做到这一点.html-webpack-plugin中publicPath问题类似且有帮助.然而,最大的帮助是从npm run eject荷兰国际集团出的创造-反应-应用程序和检查webpack.config.js文件.

TL; DR:您需要在插件构造函数中指定保存路径.

new MiniCssExtractPlugin({
  // Options similar to the same options in webpackOptions.output
  filename: "assets/css/[name].css",
}),
Run Code Online (Sandbox Code Playgroud)

您可能需要重新考虑模块输出逻辑.避免在module.output.path例如指定嵌套路径public/assets/js,而是设置目录:public并设置filename密钥的嵌套:assets/js/[name].js.

然后,您可以publicPath在主体module.output中指定用于子域或CDN的a.

最后的完整配置对我有用:

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,

    }),
  ]
};
Run Code Online (Sandbox Code Playgroud)

  • 如果目录结构发生变化,如何更改相对于 `assets/css/` 的资源 url。 (2认同)