为什么要通过webpack导入Bootstrap CSS而不是直接链接它?

3

我一直在学习webpack,用于单页应用的开发。

其中一个示例使用了:

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

像这样一个加载器一起使用:
{
   test: /\.css$/,
   use: ['style-loader', 'css-loader']
}

这个方法可以将Bootstrap样式表注入到main.js中,然后在运行时将其注入到DOM中。

嗯,好吧。但是为什么要这样做呢?我没有看到与使用普通链接相比的好处。

另一方面,这也增加了捆绑包的大小(我的应用程序捆绑包已经超过5兆),这只会增加启动时间而不是使用CDN。

我有什么遗漏的吗?

更新

我想我找到了答案:下一步是使用类似于MiniCssExtractPlugin的工具将导入的CSS提取到CSS文件中,如此处所述。


如果你正在使用Webpack和Bootstrap CSS,我建议你使用另一个插件,比如PurifyCss。它可以让你“摇树”,即删除你实际上没有使用的所有Bootstrap类,从而减小你的捆绑包大小。https://www.npmjs.com/package/purifycss-webpack - amyloula
1个回答

4

当你只有一个依赖项时,这并不会有任何区别。但是如果你有一堆第三方库,你可以将它们打包和压缩成一个文件。这样在应用程序进入生产环境时会给你带来优势。

另外的好处是将 .scss 转换成 css。

示例 web pack 配置

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
    }
};

1
加上1作为例子 - 非常有帮助 - Greg Gum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接