为什么使用 webpack 导入 bootstrap css 而不是仅仅链接到它?
Why import bootstrap css with webpack instead of just linking to it?
我一直在学习用于单页应用程序的 webpack。
其中一个示例正在使用:
import 'bootstrap/dist/css/bootstrap.min.css';
连同这样的装载机:
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
这可以将 bootstrap css 注入 main.js,然后在运行时注入 dom。
好的。但为什么?我看不出这比正常 link.
有什么好处
代码的另一面是现在增加包的大小(我的应用程序包已经超过 5 兆)与使用 CDN 相比只会增加启动时间。
我错过了什么吗?
更新
我想我找到了答案:下一步是使用 MiniCssExtractPlugin 将导入的 css 提取到 css 文件,如解释的那样 here
当你有一个依赖时,它不会有任何区别。但是如果你有一堆第三方库,你可以将它们打包并缩小为一个。当您的应用程序投入生产时,它会给您带来优势。
还有其他好处是将 .scss 转换为 css
Web 包配置示例
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
}
};
我一直在学习用于单页应用程序的 webpack。
其中一个示例正在使用:
import 'bootstrap/dist/css/bootstrap.min.css';
连同这样的装载机:
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
这可以将 bootstrap css 注入 main.js,然后在运行时注入 dom。
好的。但为什么?我看不出这比正常 link.
有什么好处代码的另一面是现在增加包的大小(我的应用程序包已经超过 5 兆)与使用 CDN 相比只会增加启动时间。
我错过了什么吗?
更新
我想我找到了答案:下一步是使用 MiniCssExtractPlugin 将导入的 css 提取到 css 文件,如解释的那样 here
当你有一个依赖时,它不会有任何区别。但是如果你有一堆第三方库,你可以将它们打包并缩小为一个。当您的应用程序投入生产时,它会给您带来优势。
还有其他好处是将 .scss 转换为 css
Web 包配置示例
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
}
};