node.js - rollup包axios,不能用
问题描述
项目中使用axios,然后使用rollup打包。
在浏览器端,这是正常的。但是nodejs端报错。
错误信息:
node test\test.js
error
ReferenceError: XMLHttpRequest is not defined
at dispatchXhrRequest (D:\Project\NodeJs\rollup-axios-error-demo\dist\demo.js:684:21)
at new Promise (<anonymous>)
at xhrAdapter (D:\Project\NodeJs\rollup-axios-error-demo\dist\demo.js:676:12)
at dispatchRequest (D:\Project\NodeJs\rollup-axios-error-demo\dist\demo.js:1082:12)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:745:11)
at startup (internal/bootstrap/node.js:266:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)
我创建了一个演示供您查看:rollup-axios-error-demo
axios源码区分运行环境的代码为:
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// For browsers use XHR adapter
adapter = require('./adapters/xhr');
} else if (typeof process !== 'undefined') {
// For node use HTTP adapter
adapter = require('./adapters/http');
}
return adapter;
}
但是打包之后就变成了:
function getDefaultAdapter() {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// For browsers use XHR adapter
adapter = xhr;
} else if (typeof process !== 'undefined') {
// For node use HTTP adapter
adapter = xhr;
}
return adapter;
}
导致 XMLHttpRequest 在 nodejs 端被实例化
解决方案
万一有人偶然发现,我遇到了同样的问题,并通过切换import axios from 'axios'
到const axios = require("axios")
使用 axios 的任何文件来解决它。
推荐阅读
- python-3.x - 用python美汤刮网
- asp.net-mvc - 电子邮件 MVC 中未显示图像
- swift - 如何在下面的函数中重构以下嵌套的 swift if 语句?
- javascript - 然后计数类指定要更改的数量
- elasticsearch - firebase 云函数“RequestError:错误:无效协议:xxx.xx。”
- excel - VB脚本根据Excel中的列将数据拆分为多个工作表
- laravel - Laravel 是否为 CSRF 令牌设置 Cookie
- c - 套接字,使用 SOCK_DGRAM 的客户端服务器通信,epoll
- java - Selenium 在关闭另一个 iframe 时切换到错误的 iframe
- angularjs - Ionic 3 HTTP 状态码 401 更改为 0