MiniCssExtractPlugin的公共路径未生效

17

我正在使用MiniCssExtractPlugin在我的React应用程序中进行CSS文件的延迟加载。

我已经为MiniCssExtractPlugin提供了publicPath选项,但它没有采用这个选项值,而是采用了output.publicPath选项。

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

26
似乎你不是唯一一个困惑的人, 有52条评论说明如何正确操作。 html-webpack-plugin中的publicPath问题相似且有所帮助。然而,最大的帮助来自于通过npm run eject退出create-react-app并检查webpack.config.js文件。
简而言之:您需要在插件构造函数中指定保存路径。
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,用于子域或CDN等。
最终的完整配置对我有用:
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,

    }),
  ]
};

2
如果目录结构发生变化,我该如何相对于 assets/css/ 更改资源 URL? - Sisir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接