Как автоматически загрузить извлеченные CSS из пакета Webpack? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь сделать пакет Webpack, который будет автоматически загружать извлеченные CSS.

Это моя пользовательская конфигурация Webpack для VueJS (я не использую ничего из их CLI)

const loader_autoprefixer = {
  loader: 'postcss-loader',
  options: {
    ident: 'postcss',
    plugins: [
      require('autoprefixer')({
        overrideBrowserslist: [ 'last 2 versions and not dead and >.1%', 'not ie 11' ]
      }),
    ]
  }
}

const loader_scssInclude = {
  loader: 'sass-resources-loader',
  options: {
    resources: [
      /* Some SCSS paths */
    ]
  }
}

const loader_extractCssChunks = {
  loader: ExtractCssChunks.loader
}

let webpackConfig = {
  mode: 'production',
  entry: {
    main: './src/js/main.js',
  },
  output: {
    path: /* required path */,
    publicPath: '/js/',
    filename: '[name].js',
    chunkFilename: '[name].js'
  },
  devtool: 'source-map',
  module: {
    rules: [
      {
        enforce: 'pre',
        test: /\.(js|vue)$/,
        exclude: /node_modules/,
        loader: 'eslint-loader'
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        options: {
          rootMode: 'upward'
        }
      },
      {
        test: /\.vue$/,
        use: 'vue-loader'
      },
      {
        test: /\.scss$/,
        use: [
          loader_extractCssChunks,
          'css-loader',
          loader_autoprefixer,
          'group-css-media-queries-loader',
          'sass-loader',
          loader_scssInclude
        ]
      },
      {
        test: /\.css$/,
        use: [
          loader_extractCssChunks,
          'css-loader',
          loader_autoprefixer,
          'group-css-media-queries-loader'
        ]
      },
      {
        test: /\.modernizrrc$/,
        loader: 'modernizr-loader!json-loader'
      }
    ]
  },
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
    },
    extensions: ['*', '.js', '.vue', '.json', '.css']
  },
  performance: {
    maxEntrypointSize: 1024000,
    maxAssetSize: 512000
  },
  plugins: [
    new VueLoaderPlugin(),
    new ExtractCssChunks({
      filename: 'component-styles/document-bundle.css',
      chunkFilename: 'component-styles/[name].css'
    }),
    new FriendlyErrorsWebpackPlugin(),
  ],
  optimization: {
    minimize: true,
    minimizer: [
      new TerserJSPlugin({
        test: /\.js(\?.*)?$/i,
        parallel: true,
        extractComments: false,
        terserOptions: {
          output: {
            comments: false,
          },
        },
      }),
      new OptimizeCSSAssetsPlugin({}),
    ]
  }
}

Проблема возникает, когда я компилирую все, и CSS необходимо загрузить.

Например, если я соберу все в один файл без разделения кода, CSS не загрузится. Но если я заставлю make этот компонент загружаться как отдельный чанк, CSS сработает.

Например, CSS от загруженного таким образом автономного компонента не будет отображаться

import Lightbox from 'Lightbox.vue'

Но это будет работать:

const Lightbox = () => import(
 /* webpackChunkName: "Lightbox" */
 /* webpackPrefetch: true */
 /* webpackPreload: true */
 'Lightbox.vue'
)

Чего мне не хватает? Что нужно сделать, чтобы CSS загружался с одним пакетом автоматически и без ручных вставок этого стиля в HTML?

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