如何使用 * 在 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 中导入 xlsx 文件时如何手动强制 javascript 事件?
如何在 vanilla Javascript 文件中导入 nodejs 模块
如何在 Vanilla JavaScript (JS) 中导入/导出类