首页 > 解决方案 > 如何配置 webpack 以支持所有条件要求?

问题描述

我收到一个错误:XMLHttpRequest is not defined通过在 nodejs 中运行捆绑的代码。

在它的源代码中axios是:

function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // For browsers use XHR adapter
    adapter = require('./adapters/xhr');
  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
    // For node use HTTP adapter
    adapter = require('./adapters/http');
  }
  return adapter;
}

但是被 webpack@5 捆绑后,所有的条件都进入了同一个模块13,这就是错误发生的地方:

function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // For browsers use XHR adapter
    adapter = __webpack_require__(13);
  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
    // For node use HTTP adapter
    adapter = __webpack_require__(13);
  }
  return adapter;
}

但我真的不知道为什么以及如何解决这个问题。这是迷你仓库:代码示例

标签: javascriptwebpack

解决方案


只需设置 webpack.config.js

{
    // ...
    target: ['web', 'node'],
    // ...
}

我以为 webpack5 不支持 target 属性,这显然是我的错误

https://webpack.js.org/configuration/target/#string-1


推荐阅读