【问题标题】:Rollup package axios, can not be usedrollup包axios,不能用
【发布时间】:2018-09-25 06:32:04
【问题描述】:

项目中使用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 端被实例化

【问题讨论】:

  • 你找到解决办法了吗?...
  • 不,我写了一个兼容浏览器和nodejs的http请求代码。使用require来引入http和http。解决打包失败的问题
  • 这个问题,即使换了webpack也不行。
  • 在测试一个基于 dom 的实用程序时,我遇到了类似的问题。我最终为基于 dom 的缺失函数添加了模拟。在这种情况下,您可以使用 npmjs.com/package/mock-xmlhttprequest 模拟 XMLHttpRequest

标签: node.js axios rollup


【解决方案1】:

如果有人偶然发现这个问题,我遇到了同样的问题,并通过在使用 axios 的任何文件中将 import axios from 'axios' 切换为 const axios = require("axios") 来解决它。

【讨论】:

  • 现在是下一个汇总问题。 ReferenceError: Can't find variable: require
  • @oliver dixon 在您的 rollup.config 中缺少导入,即 @rollup/plugin-node-resolve?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2019-02-17
  • 2018-10-27
  • 2021-06-27
  • 2020-12-27
  • 2020-11-30
相关资源
最近更新 更多