【问题标题】:How to use * to import in JavaScript?如何使用 * 在 JavaScript 中导入?
【发布时间】:2021-05-27 12:04:13
【问题描述】:

我有一个使用它的网络应用程序,如下例所示。

import * as b from './library/library.js';

在 Windows、Linux、带有 Chrome 和 Firefox 的 Android 中一切正常, 但我注意到它在 Iphone 和 Mac 上的 Safari 上不起作用,它也不起作用 在 iPhone 的 Chrome 上,所有这些。

我在没有控制台的情况下查看并返回此错误。

SyntaxError: Unexpected identifier 'as'. Expected 'from' before exported module name.

我做了一些测试,发现问题只有在使用星号*一次导入模块的所有功能时才会出现,如下例所示;

import * as name from "module-name"; // This way of the error.

import {export} from "module-name"; // That works OK.

有谁知道如何解释 Safari 中的问题,或者是否有解决方案?

我需要用这种通用的方式导入,因为有很多小函数 除了在系统的所有页面上使用它之外,我还导出了这个库, 所以在每个页面上必须命名我要导入的每个函数并不是很实际 系统。

我已经很感激谁能提供帮助。

【问题讨论】:

  • 我也看到了这一点,但仅限于稍旧版本的 safari。我的同事在 Safari 14.0.3 中得到它,但我在 14.1.1 中没有。

标签: javascript ios web import safari


【解决方案1】:

如果问题确实出在星号上,那么我建议使用默认导入。很多图书馆都提供了它们。 import b from './library/library.js';.

如果没有,我建议使用babel 将带有模块的代码转换为不带模块的代码。另外,我建议使用 Webpack,它提供了 tree shaking 功能并从生成的工件中删除了多余的 MB 库代码。

总而言之,babel 是你的最佳变体。

【讨论】:

【解决方案2】:

您确定您没有在某处使用export * as namespace 吗? safari 不支持此功能(直到 14.1,在我自己的测试中),并且会给出您上面提到的错误。 https://caniuse.com/mdn-javascript_statements_export_namespace.

另外请注意,在 iOS 上,每个浏览器,甚至是 Chrome,都是 webkit (safari) 引擎的包装器。

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-06-10
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多