我有一个盖茨比网站,它使用了许多软件包。其中一个包是从我们的monorepo发布的:@example/forms
。该包包含许多命名的导出,每个导出对应于我们在网站上使用的表单组件。有相当多的形式,其中一些是相对复杂的多步骤形式,规模非常大。
目前,Gatsby/Webpack在树共享方面做得很好,并且确实生成了大量捆绑包,一些通用捆绑包和一个用于站点的每个页面的捆绑包,其中包含仅在该页面上使用的任何本地资产或组件。但是,来自@example/form
的所有组件都被添加到Commons
捆绑包中,尽管大多数仅在单个页面上使用。这导致加载到每个页面上的Commons
捆绑包不必要的膨胀。
如果感觉应该可以将@example/form
中的各个组件拆分为特定于页面的捆绑包,但我不确定我是否希望太多。例如,如果表格A仅用于第4页,我希望表格A仅添加到第4页的捆绑包中。
这是被支持的吗?如果是的话,是什么阻止了这一切的发生。
@example/forms
在ES6导出保持不变的情况下进行传输,副作用
在其包中设置为
。false
。json
它的主
文件是索引。js
将所有表单组件作为单独的命名导出(重新)从它们自己的文件中导出:
export {default as FormA} from './forms/formA'
export {default as FormB} from './forms/formB'
...
另一件可能相关的事情是,所有从@example/forms
导出的内容都在盖茨比网站内使用,只在单独的页面上使用。似乎树木摇动不能跨束使用,即首先进行树木摇动,然后将剩下的部分拆分为束。使用这种逻辑,@example/forms
将在多个页面上使用,并移动到commons。然而,这肯定不是最优的,希望不是正在发生的事情。
树摇动过程是缩小步骤的一部分,这实际上处于后期阶段,因为不可能颠倒顺序,首先是树摇动,然后是块分割。
但是,您可以使用一些启发式方法来拆分表单库
splitChunks
将这个@example/form
模块整体拆分为一个单独的块,这将减少公地膨胀// webpack.config.js
module.exports = {
...
optimization: {
splitChunks: {
cacheGroups: {
formComponents: {
chunks: 'all',
enforce: true,
minChunks: 1,
name: 'form-components',
priority: 10,
test: /[\\\/]node_modules[\\\/]@example[\\\/]forms[\\\/]/,
},
},
},
},
...
};
// webpack.config.js
module.exports = {
...
optimization: {
splitChunks: {
cacheGroups: {
formComponents: {
chunks: 'all',
minChunks: 1,
name(module) {
const libPath = path.resolve(path.join('node_modules/@example/forms'))
const folderBasedChunk = path.relative(libPath, module.context);
const hash = crypto.createHash('sha1');
hash.update(folderBasedChunk)
return hash.digest('hex').substring(0, 8)
},
priority: 10,
reuseExistingChunk: true,
enforce: true,
test: /[\\\/]node_modules[\\\/]@example[\\\/]forms[\\\/]src[\\\/]forms[\\\/]/,
},
},
},
...
};
您可以查看我创建的一个模拟场景的小示例。https://github.com/felixmosh/webpack-module-split-example
希望这能有所帮助
下面是WebPack4配置代码: 新的配置代码从项目中使用的节点模块中获取所有代码。但我只希望拆分供应商库(我在enrtry配置部分定义),而不希望拆分node_modules中的所有代码。 在本例中:“babel-polyfill”,“react”,“react-dom”,“jquery”,“bootstrap”
我试图通过C结构从主要Go语言代码到不同的包,并得到类型转换错误。 C头文件test.h 高浪包测试 Go语言主要代码 编译主代码时,我收到以下错误:无法转换 当我尝试对变量进行类型转换时,它给出了以下错误:无法引用未报告的名称测试_Ctype_struct_dd_err_struct无法转换 请帮我解决这个问题
我有一个包含不同大小记录的单一源CSV文件,它将每个记录推送到一个源主题中。我想将这些记录从源主题拆分成不同的KStreams/KTables。我有一个用于一个表加载的管道,在这里我将记录从源主题以分隔格式推送到stream1中,然后将记录推送到另一个AVRO格式的流中,再将该流推送到JDBC接收器连接器中,该连接器将记录推送到MySQL数据库中。管道需要相同。但我希望将不同表的记录推送到一个源主
我有这样一份清单: 如何将此列表拆分为三个变量,每个变量分别保持不变
我正在制作一个运行在karaf 4.0.4上的osgi应用程序。 我的应用程序使用一个PostgreSQL数据库。连接器由pax jdbc处理。我使用Karaffeature和功能。 一些模块提供可以添加/删除的服务。 TL/DR:有没有办法将我的实体拆分成多个包? 以下是我的情况: 我目前有一个名为model的模块 我的文件 类注释 注释的类和 访问我实体的服务 这是我的持久性文件: 以及用于访
分包 支持小程序的分包机制,配置 entry 时按一般的页面进行配置,目录结构如下: └─ src ├─ packageA │ └─ pages │ └─ a │ ├─ index.js │ └─ index.vue └─ pages └─ home ├─ index.js └─ index.vue App