- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
历史:我最近发现使用 Webpack 和动态导入有一个奇怪的行为。首先,我认为这可能是我使用的第 3 方库“可加载组件”,因此我在它们的末尾打开了一个错误问题( https://github.com/gregberge/loadable-components/issues/517 )。作者回复告诉我该行为来自 Webpack 和动态导入本身。
我可以忍受这样一个事实,即它不会对动态导入进行树摇动,对我来说,理解为什么会出现这种情况更重要。
用于演示行为的演示存储库可以在此处找到:https://github.com/dazlious/treeshaking-dynamic-imports
问题的简短描述:从我的 Angular 来看,导入的命名导出不应强制将所有导出的代码捆绑在其中。
在演示案例中,我们有一个组件 (./lib/index.jsx),它有两个名为 module1 (./lib/module1/module1.jsx) 和 module2 (./lib/module1/module2.jsx) 的子组件)。 Module1 导出一个名为 FOO_BAR 的常量,然后由 Module2 作为命名导入导入。
查看构建输出时,您会发现 Module2 包含整个 Module1,而不仅仅是专门导入的字符串。
这里有人对 Webpack 和/或动态导入有深入的了解吗?很高兴了解有关该行为的更多信息。
最佳答案
我将 webpack.config 编辑为:
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const baseDir = path.resolve(__dirname);
const config = {
mode: process.env.NODE_ENV,
stats: 'minimal',
resolve: {
extensions: ['.js', '.jsx'],
symlinks: false,
},
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false,
reportFilename: 'analyze.html',
}),
],
target: 'web',
devtool: 'hidden-source-map',
entry: {
bundle: [path.resolve(baseDir, 'lib')],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
}),
],
mangleWasmImports: true,
splitChunks: {
cacheGroups: {
default: false,
vendors: false,
vendor: {
name: 'vendor',
chunks: 'all',
test: /node_modules/,
priority: 20
},
common: {
name: 'common',
minChunks: 2,
chunks: 'all',
priority: 10,
reuseExistingChunk: true,
enforce: true
}
}
},
},
output: {
chunkFilename: '[name].[chunkhash].js',
publicPath: '/',
path: path.join(baseDir, 'dist'),
filename: '[name].[hash].js',
},
module: {
rules: [
{
test: /^.*\.jsx?$/,
include: [path.resolve(baseDir, 'lib')],
loader: 'babel-loader?cacheDirectory',
},
{
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
},
],
},
};
module.exports = config;
我想这就是您想要的结果吗? image of bunde analyzer showing modules in their own bundles
我认为它需要 splitChunks 选项才能真正正确地对组件进行树摇动。我花了很多时间试图弄清楚 webpack,但我仍然在这里猜测。
关于javascript - Webpack Tree-Shaking 动态导入似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038996/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!