Я пытаюсь сделать пакет 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?