Зачем импортировать загрузочный css с помощью веб-пакета, а не просто ссылаться на него? - PullRequest
0 голосов
/ 30 августа 2018

Я изучал веб-пакет для использования в одностраничном приложении.

Один из примеров использует:

 import 'bootstrap/dist/css/bootstrap.min.css';

вместе с таким загрузчиком:

{
   test: /\.css$/,
   use: ['style-loader', 'css-loader']
}

Это работает, чтобы внедрить загрузочный css в main.js, а затем вводится в dom во время выполнения.

Хорошо, хорошо. Но почему? Я не вижу в этом пользы по сравнению с обычной ссылкой.

Другая сторона кода заключается в том, что это увеличивает размер пакета (мой пакет приложений уже превышает 5 мегабайт), что просто увеличивает время запуска по сравнению с использованием CDN.

Я что-то упустил?

Обновление

Я думаю, что нашел ответ на этот вопрос: Следующий шаг - извлечь импортированный CSS в файл CSS с помощью MiniCssExtractPlugin, как объяснено здесь

1 Ответ

0 голосов
/ 31 августа 2018

Это не будет иметь никакого значения, если у вас есть одна зависимость. Но если у вас есть куча сторонних библиотек, вы можете связать и свернуть в одну. Это даст вам преимущество, когда ваше приложение будет запущено в производство.

А также другими преимуществами будет преобразование .scss в css

Пример конфигурации веб-пакета

module.exports = {
    mode: 'development',
    entry: {
        'main.app.bundle': ['main.ts', "./somestyle.css"]
    },
    optimization: {
        splitChunks: {

               cacheGroups: {
                commons: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    },
    output: {
        publicPath: '/dist/',
        filename: '[id].js',
        chunkFilename: "[name].js",
        path: path.resolve(__dirname, 'dist'),

    },
    module: {
        rules: [{
                test: /\.(sa|sc|c)ss$/,
                use: [
                    'exports-loader?module.exports.toString()',
                    {
                        loader: MiniCssExtractPlugin.loader,
                    },
                    'css-loader',
                    'sass-loader',
                ]
            },

            {
                // This plugin will allow us to use html templates when we get to the angularJS app
                test: /\.html$/,
                exclude: /node_modules/,
                loader: 'html-loader',
            },
            {
                test: /\.tsx?$/,
                loader: 'ts-loader',
            }
        ]
    },
    node: {
        fs: 'empty'
    },
    resolve: {
        modules: [
            __dirname,
            'node_modules',
        ],
        extensions: [".ts", ".tsx", ".js"]
    },
    plugins: [
        new CleanWebpackPlugin(['dist']),
        new HashOutput({
            validateOutput: false,
        }),
        new MiniCssExtractPlugin({
            filename: 'application.bundle.css',
            chunkFilename: '[name].css'
        })
    ],
    devtool: 'source-map',
    externals: [],
    devServer: {
        historyApiFallback: true
    }
};
...