uni-app H5打包时vite.config.js里插件的closeBundle代码无法正常运行
uni-app H5打包时vite.config.js里插件的closeBundle代码无法正常运行
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 14.4.1 | HBuilderX |
操作步骤:
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)
}
}
}
}
预期结果:
能正常运行
实际结果:
不能正常运行
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)
}
}
}
}
更多关于uni-app H5打包时vite.config.js里插件的closeBundle代码无法正常运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我后来发现只要我在钩子函数的末尾主动加个耗时任务,前面的异步任务又能进行下去了,比如在closeBundle()函数末尾添加如下代码:
for (var i = 0; i < 20000; i++) {
console.log(i);
}
我感觉就是HB内置的终端在打包完强行关掉了所有进程,导致了有些异步的任务根本没法正确完成
更多关于uni-app H5打包时vite.config.js里插件的closeBundle代码无法正常运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni-app
打包 H5 项目时,如果你在 vite.config.js
中使用了 closeBundle
钩子,但发现它无法正常运行,可能是由于以下几个原因:
1. Vite 版本问题
closeBundle
是 Vite 2.x 及之后版本中引入的钩子。如果你使用的是 Vite 1.x 版本,那么这个钩子是不可用的。请确保你使用的是 Vite 2.x 或更高版本。
npm install vite[@latest](/user/latest)
2. 插件注册问题
确保你正确地在 vite.config.js
中注册了插件,并且 closeBundle
钩子被正确地定义。
import { defineConfig } from 'vite';
import uni from '[@dcloudio](/user/dcloudio)/vite-plugin-uni';
export default defineConfig({
plugins: [
uni(),
{
name: 'custom-close-bundle-plugin',
closeBundle() {
console.log('closeBundle hook is running');
// 你的自定义逻辑
},
},
],
});
3. 打包流程问题
closeBundle
钩子是在打包结束后触发的。确保你的打包流程正确执行,没有提前终止或出错。
4. 异步问题
如果 closeBundle
钩子中有异步操作,确保你正确处理了异步代码。你可以使用 async/await
或者返回一个 Promise
。
closeBundle: async () => {
console.log('closeBundle hook is running');
await someAsyncFunction();
// 你的自定义逻辑
},
5. 日志输出问题
如果你在 closeBundle
钩子中使用了 console.log
或其他日志输出方式,确保你的构建工具或终端能够正确显示这些日志。你可以尝试使用 process.stdout.write
或其他日志库来输出日志,以确保日志能够被捕获。
6. 插件顺序问题
某些插件可能会影响 closeBundle
钩子的执行。尝试将你的插件放在插件数组的最后,以确保它在其他插件之后执行。
7. 检查构建环境
确保你在正确的环境中运行打包命令。closeBundle
钩子只在打包时触发,而不在开发服务器运行时触发。
npm run build:h5
8. 调试
如果你仍然无法解决问题,可以尝试在 closeBundle
钩子中添加更多的调试信息,或者使用 debugger
语句来逐步调试代码。
closeBundle() {
debugger;
console.log('closeBundle hook is running');
// 你的自定义逻辑
},
9. 检查 uni-app 版本
uni-app
的版本也可能影响 vite.config.js
的配置。确保你使用的是支持 Vite 的 uni-app
版本。
npm install [@dcloudio](/user/dcloudio)/vite-plugin-uni[@latest](/user/latest)