【问题标题】:How to handle functions like fetch when making a UMD library (for both browsers/node)制作 UMD 库时如何处理 fetch 等功能(适用于浏览器/节点)
【发布时间】:2021-11-05 03:30:07
【问题描述】:

我正在制作一个可以在任何环境(节点、浏览器、es6 模块)中使用的全局库。为此,我正在使用 Webpack 生成 UMD 文件。但是我如何处理与相反环境相矛盾的功能(如获取请求)。我开始使用 axios,因为我发现它适用于浏览器和节点,但遇到了不同的问题,我将在下面说明。

  • 直接在我的库中使用 Axios: 节点报错“XMLHttpRequest is not defined”。

  • 在 Webpack 中将“Axios”指定为 Externals::该库在 Node 中开始正常工作,但现在在浏览器中停止工作。因为 Axios 现在在浏览器中是未定义的。

  • 特殊情况:我还通过在 package.json 中添加指向 src/index.jsmodule 条目来为库提供 ES6 支持。现在,在浏览器中它成为问题,因为我在我的库文件中使用import axios from 'axios'。而且由于浏览器在 ES6 模块的情况下采用它(我说的是当我们使用 <script type='module'>import {func} from "./myLibrary.js" .....</script> 时)。这成为一个问题,因为浏览器不能使用绝对路径,它需要相对路径。那么,是不是不可能为浏览器提供这样的 ES6 支持呢?在 React 中访问相同的 ES6 库可以正常工作,因为它当然可以在模块捆绑器之上工作,并且与浏览器(脚本标签)没有相同的问题。

所以重点是,我搜索它并尝试解决问题的次数越多,我就会遇到越来越多的问题。有什么标准的方法可以解决吗?因为如果存在UMD file Format 之类的东西,应该可以创建全局库。我只在这种情况下谈到了 Axios/Fetch,但我不确定在其他情况下我还会面临哪些其他类型的问题。

【问题讨论】:

    标签: javascript node.js webpack axios umd


    【解决方案1】:

    fetch 或 XMLHttpRequest 是属于窗口浏览器对象的函数。所以 nodejs 不能拥有它们,node 没有 window 对象。您必须包含一些模块才能访问提供浏览器的类似 fetch 的 API。

    https://www.npmjs.com/package/node-fetch

    【讨论】:

    • node-fetch 内部是否与 axios 不同?我认为它只提供了浏览器在节点内获取的语法,实际上与浏览器的语法不同。
    猜你喜欢
    • 2022-11-02
    • 2015-08-07
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多