在 Polymer 3 元素或 lit-elements 中加载普通 JavaScript

Load ordinary JavaScripts in Polymer 3 elements or lit-elements

我正在将 Polymer 2 应用程序转换为 Polymer 3。Modulizer 对我不起作用,所以我手动进行了转换。多亏了出色的升级指南,到目前为止,它基本上是直截了当的。

不过还剩下一个任务: 在我的 Polymer 2 应用程序中,我有一个特殊的 html 导入 (d3-import.html),它引入了 d3.js lib 版本 3,它是一个普通的 JavaScript 文件(没有 ES6模块!)。此导入仅动态加载到总共 20 个页面中的两个页面中,因为其他 18 个页面不需要它。

在 Polymer 3 中,我无法将其作为 ES6 模块导入,因为它不是模块。在我的主 start.html 中加载它意味着即使用户只使用不需要它的其他 18 个页面,它也会被加载。 我尝试在我的 Web 组件模板中编写脚本标签,但这似乎不起作用。不幸的是,我在浏览器工具中没有看到任何错误。模板只是在脚本标签行停止加载。

知道怎么做吗?

附加问题: 因为我开始在同一个应用程序中使用 lit-element。 lit-element同样的问题如何解决?

编辑:请注意,我目前不使用任何构建 steps/tools 除了 polymer-build 将模块路径替换为实际文件路径。

请注意,这个挑战与 Polymer 或 LitElement 无关,这只是一个关于如何从模块加载非模块资源的问题。

据我所知,最直接的方法是使用像 Rollup 这样可以支持 CommonJS 或 UMD 的打包器。 Rollup 为此提供了 commonjs 插件:https://github.com/rollup/plugins/tree/master/packages/commonjs

另一种选择是升级到 D3 5.x,它本身似乎作为标准模块发布。考虑到涉及的文件数量,您仍然可能需要一个捆绑器来减少网络往返。