uni-app app端异步加载组件会报Invalid value "iife" for option "output.format"

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app app端异步加载组件会报Invalid value “iife” for option “output.format”

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
# 操作步骤:
创建 `index.vue`,通过 `import.meta.glob("./components/test.vue")` 方式引入,`components` 文件夹下的 `test.vue` 文件

# 预期结果:
正常打包编译

# 实际结果:
报错:Invalid value "iife" for option "output.format" - UMD and IIFE output formats are not supported for code-splitting builds

# bug描述:
app 使用异步引入组件的方式:比如 `import.meta.glob("./components/zytable.vue")`、或 `defineAsyncComponent`

app 调试的时候会直接报:

> Invalid value "iife" for option "output.format" - UMD and IIFE output formats are not supported for code-splitting builds  

H5端不会。

app端本身就不支持异步加载组件吗?

直接使用 `import("./components/zytable.vue")`,异步加载组件,H5端可以渲染,app端直接空白

5 回复

只有h5端支持异步组件,参考文档


那app端有办法进行异步组件加载么?找了一圈,没找到

改为下面的写法: const views= import.meta.glob(’/pages/*/.vue’, { eager: true });
let asyncComponents = ref("");//异步渲染的组件
let comp=views[/pages/${变量}.vue];
asyncComponents.value=markRaw(comp.default)
<component :is="asyncComponents" v-if="asyncComponents"></component>

但是组件还未使用的时候,资源也加载了,和同步请求没啥两样了吧

在使用 uni-app 开发应用时,如果你在 App 端异步加载组件时遇到 Invalid value "iife" for option "output.format" 的错误,通常是因为构建工具在处理异步组件时,配置的模块格式(output.format)不正确。

解决方法

  1. 检查构建配置: 确保你的构建配置中没有错误地设置了 output.formatiifeiife 是一种模块格式,通常用于浏览器环境,但在某些情况下,它可能不适用于异步加载的组件。

  2. 使用正确的模块格式: 在 uni-app 中,异步加载组件通常使用 import() 语法,这需要构建工具支持 esmcjs 模块格式。你可以尝试将 output.format 设置为 esmcjs

  3. 修改 vite.config.jswebpack.config.js: 如果你使用的是 Vite 或 Webpack 作为构建工具,可以在配置文件中修改 output.format

    Vite 配置示例

    export default defineConfig({
      build: {
        rollupOptions: {
          output: {
            format: 'esm', // 或者 'cjs'
          },
        },
      },
    });

    Webpack 配置示例

    module.exports = {
      output: {
        format: 'esm', // 或者 'cjs'
      },
    };
  4. 检查 uni-app 版本: 确保你使用的 uni-app 版本是最新的,或者至少是一个稳定的版本。某些旧版本可能存在与异步加载组件相关的 bug。

  5. 使用 defineAsyncComponent: 如果你使用的是 Vue 3,可以尝试使用 defineAsyncComponent 来定义异步组件,这可能会避免一些构建问题。

    import { defineAsyncComponent } from 'vue';
    
    const AsyncComponent = defineAsyncComponent(() =>
      import('./components/MyComponent.vue')
    );
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!