Custom directive is missing corresponding SSR transform and will be ignored

最近在尝试做vue3.0的服务端渲染,自己也写了一些相关的插件,其中用到一些指令插件的时候,发现在服务端渲染解析的时候会报错,是缺少transform方法导致的,后面经过大佬指点,发现自定义指令的服务端transform方法是要自定义的,不然运行打包都会报Custom directive is missing corresponding SSR transform and will be ignored。

解决方案:
本人用的是vite,所以解法如下,在配置文件中传入自定义指令的服务端transform。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export const ssrTransformCustomDir = () => {
  return {
    props: [],
    needRuntime: true
  }
}

export default defineConfig({
  plugins: [vue(
    {
    template: {
      ssr: true,
      compilerOptions: {
        directiveTransforms: {
          'img-lazy-load': ssrTransformCustomDir,
          'rescroll': ssrTransformCustomDir
        }
      }
    }
  }
  )],
})

对于内置了mounted等这些生命钩子的函数,要把needRuntime置为true,否则客户端接管后,不会触发。
想深入了解的同学可以去阅读vue3.0 compile的源码。
比如官方v-show的transform

项目demo
自定义插件(欢迎加入造轮子)
官方issure
自定义CompilerOptions源码出处

对于使用者来说,总感觉有点复杂,以后应该会调整吧,目前暂时此解。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值