MiniCssExtractPlugin открытый путь не работает - PullRequest
0 голосов
/ 27 июня 2018

Я использую MiniCssExtractPlugin для отложенной загрузки файлов CSS в моем приложении реагирования.

Я указал опцию publicPath для MiniCssExtractPlugin, но она не принимает значение этой опции, она принимает опцию output.publicPath.

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

     }

Любая помощь ???

1 Ответ

0 голосов
/ 04 июля 2018

Кажется, что ваш не единственный, кто запутался , 52 комментария о том, как получить это право. Проблема publicPath в html-webpack-plugin была похожей и помогла. Тем не менее, самая большая помощь была от npm run eject из create-реакции-приложения и проверки файлов 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.

Затем вы можете указать publicPath в основном module.output, который вы будете использовать для поддоменов или 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,

    }),
  ]
};
...