Skip to content

add catch code #13

@maronghai

Description

@maronghai
  1. add catch code
import { reduceConfigs } from 'reduce-configs'
import { compile, compileClient } from 'pug'
export const PLUGIN_PUG_NAME = 'rsbuild:pug'

export const pluginPug = (options) => ({
  name: PLUGIN_PUG_NAME,

  async setup(api) {
    const VUE_SFC_REGEXP = /\.vue$/

    const pugOptions = reduceConfigs({
      initial: {
        doctype: 'html',
        compileDebug: false
      },
      config: options.pugOptions
    })

    api.transform({ test: /\.pug$/ }, ({ code, resourcePath, addDependency }) => {
      const options = {
        filename: resourcePath,
        ...pugOptions
      }

      if (VUE_SFC_REGEXP.test(resourcePath)) {
        let template
        try {
          template = compile(code, options)
          const { dependencies } = template
          if (dependencies) dependencies.forEach(addDependency)
          return template()
        } catch (e) { // ! important Add Catch Code
          addDependency(e.filename)
          return '<pre>' + e.message + '</pre>'
        }
      }

      const templateCode = compileClient(code, options)
      return `${templateCode}; export default template;`
    })
  }
})

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions