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

How can I vendor a 3rd party js lib via a script tag in Ember?

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

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

它会给你一个 Plaid class 可以用来与 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 配置为在其自己的脚本标签中加载某些供应商提供的脚本吗?我还需要控制文件的名称,因为上面期望名称为 link-initialize.js。或者有其他解决方法吗?

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


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

您应该可以通过 ember-auto-import 实现。

那么您应该能够从 npm 安装 Plaid 并将其导入 ember 应用程序中您需要的任何地方。

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

如果您坚持将文件保存在vendor文件夹中,您可以在ember-cli-build.js中使用西兰花FunnelMergeTrees将其复制到dist 文件夹并使用相同的脚本标签。


关于导入: 你可以创建一个 vendor-shim。就做 ember generate vendor-shim plain。在供应商 shim 中,return link-initialize.js 提供的全局变量。那你可以import这个