const deleteIconPlugin = () => {
return {
name: 'deleteIcon',
apply: 'build',
closeBundle() {
console.log(1);
setTimeout(function() {
console.log(2); // 此行未正常打印
}, 200);
const iconPath = path.resolve(__dirname, './unpackage/dist/build/web/static/icon/')
if (fs.existsSync(iconPath)) {
fs.removeSync(iconPath)
}
}
}
}
- 发布:2024-04-03 09:26
- 更新:2024-04-03 11:43
- 阅读:162
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 14.4.1
HBuilderX类型: 正式
HBuilderX版本号: 4.08
手机系统: iOS
手机系统版本号: iOS 17
手机厂商: 苹果
手机机型: 77
页面类型: vue
vue版本: vue3
打包方式: 离线
项目创建方式: HBuilderX
操作步骤:
预期结果:
能正常运行
能正常运行
实际结果:
不能正常运行
不能正常运行
bug描述:
H5打包的时候vite.config.js里的closeBundle钩子函数中的回调代码无法正常运行,
如下面代码 console.log(1)正常输出,console.log(2)没正常输出,在以前3.xx版本中都是可以正常输出的。是不是编辑器修改了啥?不支持异步的内容回调了?
如果新版本不支持异步的代码这将导致好多回调型的功能都没法写。。。
但我试了一下generateBundle函数,发现又是正常支持异步函数的。所以我懵了⊙▃⊙。。。
const deleteIconPlugin = () => {
return {
name: 'deleteIcon',
apply: 'build',
closeBundle() {
console.log(1);
setTimeout(function() {
console.log(2); // 此行未正常打印
}, 200);
const iconPath = path.resolve(__dirname, './unpackage/dist/build/web/static/icon/')
if (fs.existsSync(iconPath)) {
fs.removeSync(iconPath)
}
}
}
}
1 个回复
lihuifang (作者)
我后来发现只要我在钩子函数的末尾主动加个耗时任务,前面的异步任务又能进行下去了,比如在closeBundle()函数末尾添加如下代码:
for (var i = 0; i < 20000; i++) {
console.log(i);
}
我感觉就是HB内置的终端在打包完强行关掉了所有进程,导致了有些异步的任务根本没法正确完成