Как сделать, чтобы несколько записей использовали одни и те же CSS-файлы (вместо того, чтобы каждая имела свою собственную копию в комплекте) - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть popup.js, который использует materialize.min.css, а также bookmarkManager.js, который использует materialize.min.css (а также .js).

При моей текущей настройке в выходной папке создаются 2 комплекта, каждый со своей СОБСТВЕННОЙ копией materialize.min.css (это один и тот же файл, это ~ 200 дополнительных килобайт).

Можно ли повторно использовать CSS-файлы вместо того, чтобы каждый пакет создавал свою собственную копию?В этом случае я хочу иметь ОДИН файл materialize.min.css с несколькими файлами HTML, указывающими на него, чтобы сохранить размер.

Это мой текущий файл webpack.config:

var path = require('path');
var CleanWebpackPlugin = require('clean-webpack-plugin');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var Buffer = require('buffer/').Buffer;
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

var fileExtensions = [
  'jpg',
  'jpeg',
  'png',
  'gif',
  'eot',
  'otf',
  'svg',
  'ttf',
  'woff',
  'woff2'
];

var options = {
  entry: {
    popup: path.join(__dirname, 'src', 'js', 'popup.js'),
    options: path.join(__dirname, 'src', 'js', 'options.js'),
    background: path.join(__dirname, 'src', 'js', 'background.js'),
    bookmarkManager: path.join(__dirname, 'src', 'js', 'bookmarkManager.js')
  },
  output: {
    path: path.join(__dirname, 'build'),
    filename: '[name].bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.m?js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      },
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader
          },
          'css-loader'
        ]
      },
      {
        test: new RegExp('.(' + fileExtensions.join('|') + ')$'),
        loader: 'file-loader?name=[name].[ext]',
        exclude: /node_modules/
      },
      {
        test: /\.html$/,
        use: [
          {
            loader: 'html-loader',
            options: { minimize: true }
          }
        ],
        exclude: /node_modules/
      }
    ]
  },
  plugins: [
    // clean the build folder
    new CleanWebpackPlugin(['build']),
    new CopyWebpackPlugin([
      {
        from: 'src/manifest.json',
        transform: function(content, path) {
          // generates the manifest file using the package.json informations
          return Buffer.from(
            JSON.stringify({
              description: process.env.npm_package_description,
              version: process.env.npm_package_version,
              ...JSON.parse(content.toString())
            })
          );
        }
      }
    ]),
    new HtmlWebpackPlugin({
      template: path.join(__dirname, 'src', 'popup.html'),
      filename: 'popup.html',
      chunks: ['popup']
    }),
    new HtmlWebpackPlugin({
      template: path.join(__dirname, 'src', 'options.html'),
      filename: 'options.html',
      chunks: ['options']
    }),
    new HtmlWebpackPlugin({
      template: path.join(__dirname, 'src', 'background.html'),
      filename: 'background.html',
      chunks: ['background']
    }),
    new HtmlWebpackPlugin({
      template: path.join(__dirname, 'src', 'bookmarkManager.html'),
      filename: 'bookmarkManager.html',
      chunks: ['bookmarkManager']
    }),
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: '[name].css',
      chunkFilename: '[id].css'
    })
  ]
};

module.exports = options;

Бонусный вопрос : я видел в документации, что если я хочу минимизировать с помощью minicssextractplugin, я должен также использовать js minifier, и в этом примере это uglify js, это нарушает babel?Можно ли использовать его вместе с babel или я должен использовать что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...