发布于 

如何解决electron build、TypeScript和axios的常见问题

介绍了其中三方面的原因和解决方法

electron-build

download failed

相关原因

由于国内网络环境的原因,有时候下载速度会非常慢,甚至导致超时或失败

解决方法
  • 使用淘宝镜像源来加速下载
  • 使用全局代理
参考文档

Cannot spawn app-builder.exe: Error: spawn UNKNOWN

相关原因

pnpm可能会导致一些原生模块没有被正确载入

解决方法

[任选其一]

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in Ionic 3

解决方法

TypeScript 错误:类型Window上不存在属性X问题

TypeScript是一种静态类型检查的编程语言,它可以在编译时发现并报告潜在的错误。但是有时候,当我们使用一些第三方库或者自定义的全局变量时,TypeScript会提示类型“Window”上不存在属性“X”的错误,这是因为TypeScript无法识别这些属性

解决方法

  • 使用类型断言来告诉TypeScript,我们知道这个属性是存在的,只需要在属性前加上(<any>window)即可。例如,如果我们要使用一个名为myVar的全局变量,我们可以这样写:(<any>window).myVar
  • 使用声明合并来扩展Window接口,添加我们需要的属性。只需要在一个.ts文件中写上如下代码即可:
1
2
3
4
5
declare global {
interface Window {
myVar: any;
}
}

参考文档

axios: timeout of 5000ms exceeded超时问题如何解决

axios是一个基于Promise的HTTP客户端,它可以在浏览器和Node.js中使用。它有一个默认的超时时间为5000毫秒,也就是说如果请求在5秒内没有响应,就会抛出一个错误:”timeout of 5000ms exceeded”

解决方法

  • 增加超时时间,可以在创建axios实例时设置timeout选项,也可以在发送请求时设置timeout参数。例如:
1
2
3
4
5
6
7
8
const axios = require('axios');
const instance = axios.create({
timeout: 10000,
});

axios.get('url', {
timeout: 10000,
});
  • 捕获并处理错误,可以使用catch方法或者try...catch语句来捕获错误,并根据具体情况进行处理。例如,可以重试请求,或者提示用户检查网络连接。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
axios.get('url')
.then(response => {
// 处理响应数据
})
.catch(error => {
if (error.code === 'ECONNABORTED') {
console.log('请求超时,请重试');
} else {
// 其他错误
console.log(error.message);
}
});

// 使用try...catch语句捕获错误
(async () => {
try {
const response = await axios.get('url');
// 处理响应数据
} catch (error) {
// 处理错误
if (error.code === 'ECONNABORTED') {
// 超时错误
console.log('请求超时,请重试');
} else {
// 其他错误
console.log(error.message);
}
}
})();

参考文档