如何通过Ember中的脚本标签提供第三方js-lib



我正在尝试将Plaid与Ember应用程序集成,并按照他们网站上的说明进行操作。应该很简单,说明书上说只添加

<script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js" />

它将为您提供一个可用于与Plaid接口的CCD_ 1类。

这很好,但理想情况下,我想提供这个脚本,并将其导入到一个我可以对其进行操作的服务中。这不是开箱即用的。不幸的是,此脚本依赖于嵌入脚本标记如果你取消了这个东西,有一行它非常明确地试图找到嵌入它的脚本标记,如果找不到它就会抛出一个错误。

来自未经优化的代码:

findScriptTag: function() {
for (var t = document.getElementsByTagName("script"), n = 0, e = t.length; n < e; n += 1)
if (/link-initialize(..*?)?.js$/.test(t[n].src)) return t[n];
throw new Error("Failed to find script")

我的问题是,我可以将ember配置为在其自己的脚本标记中与其他脚本分开加载某些vendored脚本吗?我还需要控制文件的名称,因为上面要求名称为link-initialize.js。或者有其他方法可以解决这个问题吗?

我目前的解决方法是将script标记添加到index.html,但我真的希望能够说import Plaid from 'plaid';,或者类似的东西。。。没有这个单元测试是不可能的。


澄清:据我所知,没有适用于此的npm包。https://www.npmjs.com/package/plaid是不处理在页面上嵌入Plaid的后端库。它与plaid文档所说的嵌入的link-initialize.js脚本完全不同。

您可以将其放在public文件夹中。这将确保ember-cli将它以1:1的比例复制到您的构建输出中。然后添加脚本标记,如<script src="/link-initialize.js" />到您的index.html,它应该可以工作。

如果您坚持将文件保存在vendor文件夹中,则可以使用Plaid0中的西兰花FunnelMergeTrees将其复制到dist文件夹中,并使用相同的脚本标记。


关于导入:您可以创建vendor-shim。只需执行ember generate vendor-shim plain。在供应商填充程序中,只需返回link-initialize.js提供的全局变量。然后你可以import这个。

您应该能够通过ember自动导入来实现这一点。

然后你应该能够从npm安装Plaid,并将其导入到你的ember应用程序中任何需要的地方。

最新更新