ember.js 我如何通过Ember中的script标签提供第三方js lib?

jgwigjjp  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(154)

我正在尝试将Plaid与一个Ember应用程序集成,并按照他们网站上的说明进行操作。

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

它将为您提供一个Plaid类,可用于与Plaid接口。
这样做很好,但理想情况下,我希望提供此脚本并将其导入到一个服务中,这样我就可以对它进行操作。这不是现成的。不幸的是,此脚本 * 依赖于嵌入脚本标记。* 如果您将其缩小,则会有一行非常明确地尝试查找嵌入它的脚本标记,如果找不到,则会抛出错误。
从未缩小的代码:

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在它自己的script标签中单独加载某些vendored脚本吗?我还需要控制文件的名称,因为上面的命令要求名称为link-initialize.js。或者有其他方法可以解决这个问题吗?
我目前的解决方法是将script标记添加到index.html中,但是我真的希望能够说import Plaid from 'plaid';,或者类似的东西...没有这个标记,单元测试是不可能的。
澄清一下:据我所知,没有npm软件包https://www.npmjs.com/package/plaid是一个后端库,不处理在页面上嵌入Plaid。它与plaid文档所说要嵌入的link-initialize.js脚本完全不同。

eh57zj3b

eh57zj3b1#

你可以把它放在public文件夹中,这样可以确保ember-cli将它1:1复制到你的构建输出中,然后在你的index.html中添加像<script src="/link-initialize.js" />这样的脚本标签,这样就可以工作了。
如果您坚持将文件保存在vendor文件夹中,您可以在ember-cli-build.js中使用broccoli FunnelMergeTrees将其复制到dist文件夹中,并使用相同的脚本标记。
关于导入:你可以创建一个vendor-shim。只需要执行ember generate vendor-shim plain。在供应商填充程序中,只需要返回link-initialize.js提供的全局变量。然后你可以执行import

7dl7o3gd

7dl7o3gd2#

您应该能够使用ember-auto-import实现这一点。
然后,您应该能够从npm安装Plaid,并将其导入到ember应用程序中需要它的任何地方。

相关问题