ionic-framework - Webpack Stenciljs PWA
问题描述
我需要为使用 Webpack 的项目减小 Stenciljs PWA 的大小。Stenciljs 编译器创建几个 JS 文件并将它们作为 nomodule 脚本标签嵌入到 index.html 文件中。
现在我的问题:
- 有没有办法结合所有脚本(例如与 gulp)?
- 有没有办法让 Stenciljs 不使用 nomodule 脚本标签包含 JS 文件?这不是 webpack 解决的。
解决方案
Stencil 已经尽最大努力生成优化的捆绑包,这些捆绑包在生产构建中被缩小。我怀疑您是否能够使用 Webpack 进一步缩小这一点。不要被检查输出文件夹的大小(www
如果它是一个应用程序)所迷惑,因为它并不代表您在浏览器中打开应用程序时实际加载的大小。
没有办法通过简单地连接脚本将所有脚本组合成一个,因为这违背了 ES 模块的本质(每个模块一个文件)。您可以尝试dist-custom-elements-bundle
输出目标 ( https://stenciljs.com/docs/custom-elements ),它只允许您创建一个包含所有组件的包。但是,这是一个 dist 类型的输出目标,因此您必须弄清楚如何为您的应用程序使用它。
Stencil 不会nomodule
在您的 index.html 中嵌入任何脚本标签。也许你的意思是rel="modulepreload"
?
此外,编译器收集的所有元数据和 rollup 生成的依赖图可用于自动创建“modulepreload”链接,将下载关键路径中所有 JS 所需的网络往返次数减少到零。这大大减少了使用 Stencil 构建的应用程序的交互时间。
(来自https://ionicframework.com/blog/announcing-stencil-one-beta/)
您的唯一nomodule
-type 脚本是src/index.html
您的应用程序的入口点,用于不支持的浏览器type="module"
。它是默认添加的,请参见src/index.html#L22。该脚本将被已经支持 ES 模块的浏览器忽略(即不加载)。但是,删除它取决于您,您的应用程序将无法在任何不支持 ES 模块的浏览器中运行。
如果您想放弃对 IE11 和旧 Edge(v18 之前)的支持,可以使用 中的extras
选项stencil.config.ts
,这可能会进一步减小大小:
export const config: Config = {
buildEs5: false,
extras: {
dynamicImportShim: false,
cssVarsShim: false,
shadowDomShim: false,
scriptDataOpts: false,
safari10: false
}
}
推荐阅读
- c# - uint.Parse 对有效字符串抛出 System.FormatException:“输入字符串的格式不正确。”
- javascript - 我可以使用 fetch 进行“Mailjet”API 调用吗?
- delphi - 使用 Indy 和 ContentType = 'multipart/mixed' 发送电子邮件的问题
- firebase - 我的 firebase 应用程序在我尝试打开它的那一刻停止工作
- python - Python DataFrame 布局更改
- node.js - 用于对目录中的文件进行文本搜索的 NodeJS 库
- elasticsearch - 在 Prometheus 警报规则的标签值中使用今天的日期
- php - 如何跳到 PHP 语句中的下一个“elseif”?
- javascript - 进行 Ajax 调用后,如何重定向到 .Net Core 中的操作?
- javascript - 在 chrome 上删除元素时,Aria-live 区域不会读取更新