如何使用 * 在 JavaScript 中导入?

Posted

技术标签:

【中文标题】如何使用 * 在 JavaScript 中导入?【英文标题】:How to use * to import in 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 中没有。 【参考方案1】:

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

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

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

【讨论】:

但是我真的需要使用 * 星号来正确维护我的系统,我不明白为什么 safari 不接受它并且它没有写在任何地方。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/…【参考方案2】:

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

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

【讨论】:

以上是关于如何使用 * 在 JavaScript 中导入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在列表函数中导入 Javascript 库

在 Javascript 中导入 xlsx 文件时如何手动强制 javascript 事件?

如何在 vanilla Javascript 文件中导入 nodejs 模块

如何在 Vanilla JavaScript (JS) 中导入/导出类

如何在 JavaScript 和 TypeScript 中导入/导出?

在 React TypeScript 组件中导入 Javascript