【发布时间】:2021-11-05 03:30:07
【问题描述】:
我正在制作一个可以在任何环境(节点、浏览器、es6 模块)中使用的全局库。为此,我正在使用 Webpack 生成 UMD 文件。但是我如何处理与相反环境相矛盾的功能(如获取请求)。我开始使用 axios,因为我发现它适用于浏览器和节点,但遇到了不同的问题,我将在下面说明。
-
直接在我的库中使用 Axios: 节点报错“XMLHttpRequest is not defined”。
-
在 Webpack 中将“Axios”指定为 Externals::该库在 Node 中开始正常工作,但现在在浏览器中停止工作。因为 Axios 现在在浏览器中是未定义的。
-
特殊情况:我还通过在 package.json 中添加指向
src/index.js的module条目来为库提供 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