【问题标题】:dynamic import of cross origin script files跨源脚本文件的动态导入
【发布时间】:2022-11-16 23:08:46
【问题描述】:

我想使用 javascripts 动态导入功能。 但是,当我指定要导入的整个 url 时,出现错误:

Cannot find module 'https://....

我知道资源可用。导入是否仅限于同源脚本文件(因此所有模块都以./开头)?

另一方面,我可以动态创建一个脚本元素并将源设置为任何东西,当它加载时,它的所有函数(不是模块)都在全局范围内。

我想要两者的好处 :) 从交叉来源加载脚本,但将它们保留在模块结构中。

【问题讨论】:

  • 你在使用捆绑器吗?你能用你正在使用的代码更新吗?这应该正常工作 - const THREE = await import('https://cdn.skypack.dev/three@0.130.0') 等。它是一个 mjs 吗?是否存在任何其他脚本标签?
  • @dangarfield 是的,我正在使用包裹。事实上,当我添加这个时,我的 IDE 甚至显示错误:``` @parcel/core: Failed to resolve 'cdn.skypack.dev/three@0.130.0' from './src/models.ts' /media/ra/hd2/projects/licci /idstoolkit-experiments/web/src/models.ts:407:42 406 | const as = async () => { > 407 |端口('cdn.skypack.dev/three@0.130.0')> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^408 | THREE.then(e => { 409 | console.log(e) @parcel/resolver-default: Unknown url scheme or pipeline 'https:'```
  • 没错,包裹和动态导入似乎存在一些问题。谢谢!

标签: javascript parcel dynamic-import


【解决方案1】:

我相信这可能是由于许多打包器无法运行动态导入造成的:

好吧,问题不在于捆绑器不支持它们,而是它们的使用对许多人来说有些混乱,从各种回购中打开的票证数量就可以看出这一点。

有一些解决方法,但我认为您可能需要发布详细设置以供我们帮助。

现在,我建议(如果可能)在 if 条件下使用定义的字符串来开始。这并不理想,但您可能会发现自己在兜圈子。如果您提供确切的网址,那可能会有所帮助,但这是一个很好的例子:

function localeDynamicImport (locale) {
  if (lang === 'en') {
    return import('./locales/en.js');
  }

  if (lang === 'zh') {
    return import('./locales/zh.js');
  }
}

【讨论】:

  • 你好,谢谢你的回答。这些是同源进口的,很高兴进口。但您可以使用任何网址:例如cdn.skypack.dev/three@0.130.0 包裹甚至没有建造(如上所述)
猜你喜欢
  • 2018-01-13
  • 2020-02-05
  • 2016-07-21
  • 2020-12-17
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多