or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

build-tools.mdconstants-types.mddevelopment-tools.mdfilesystem.mdindex.mdminiprogram.mdplugin-system.mduts.mdvue-integration.md
tile.json

vue-integration.mddocs/

Vue.js Integration

Vue.js specific transformations, component processing, template compilation, JSX support, and server-side rendering (SSR) configuration for uni-app development across multiple platforms.

Capabilities

JSX Transformations

Transform JSX for H5 platform compatibility with uni-app specific optimizations.

/**
 * Transforms JSX for uni-app H5 platform with optimizations
 * @returns Babel plugin configuration for JSX transformation
 */
function transformUniH5Jsx(): any;

Usage Example:

import { transformUniH5Jsx } from "@dcloudio/uni-cli-shared";

// Babel configuration for H5 JSX processing
const babelConfig = {
  plugins: [
    transformUniH5Jsx(),
    // Other plugins...
  ]
};

// JSX code that gets transformed
const ComponentExample = () => (
  <view class="container">
    <text>Hello uni-app H5</text>
  </view>
);

Template Utilities

Utilities for processing Vue template URLs and external resources.

/**
 * Checks if a URL is external (absolute URL or protocol-relative)
 * @param url - URL string to check
 * @returns True if URL is external, false if relative/local
 */
function isExternalUrl(url: string): boolean;

Usage Example:

import { isExternalUrl } from "@dcloudio/uni-cli-shared";

// Check various URL types
console.log(isExternalUrl('https://example.com/image.png')); // true
console.log(isExternalUrl('http://cdn.example.com/script.js')); // true
console.log(isExternalUrl('//cdn.example.com/style.css')); // true
console.log(isExternalUrl('/static/images/logo.png')); // false
console.log(isExternalUrl('./assets/icon.svg')); // false
console.log(isExternalUrl('data:image/png;base64,iVBOR...')); // true

// Use in template processing
function processTemplateAssets(templateAst: any) {
  templateAst.forEach((node: any) => {
    if (node.type === 'element' && node.tag === 'img') {
      const srcAttr = node.attrs.find((attr: any) => attr.name === 'src');
      if (srcAttr && !isExternalUrl(srcAttr.value)) {
        // Process local image - add to build assets
        processLocalAsset(srcAttr.value);
      }
    }
  });
}

Server-Side Rendering (SSR)

Configuration for Vue lifecycle hook stripping during SSR compilation.

/**
 * Configuration for Vue lifecycle hook stripping in SSR context
 */
const stripOptions: SSRStripOptions;

interface SSRStripOptions {
  /** File patterns to include in stripping process */
  include: string[];
  /** Vue lifecycle functions to strip during SSR compilation */
  functions: string[];
}

The stripOptions configuration includes:

  • include: ['**/*.js', '**/*.ts', '**/*.tsx', '**/*.vue']
  • functions: Array of Vue lifecycle hooks that should be stripped in SSR context

Usage Example:

import { stripOptions } from "@dcloudio/uni-cli-shared";

// Use in SSR build configuration
const ssrBuildConfig = {
  rollupOptions: {
    plugins: [
      vueSSRStripPlugin({
        include: stripOptions.include,
        functions: stripOptions.functions
      })
    ]
  }
};

// Vue lifecycle hooks that get stripped in SSR:
// - beforeMount
// - mounted
// - beforeUnmount  
// - unmounted
// - onMounted
// - onBeforeMount
// - onBeforeUnmount
// - onUnmounted
// And other client-only lifecycle hooks

Vue Component Processing

The Vue integration module provides comprehensive processing capabilities for Vue single-file components (SFCs), including:

Template Transforms

// Template transformation utilities (from ./transforms)
// Complete API available through main export

Vue Utilities

// Vue-specific utilities (from ./utils)  
// Complete API available through main export

Vue Parsing

// Vue SFC parsing utilities (from ./parse)
// Complete API available through main export

Integration Examples

H5 Platform Setup

import { 
  transformUniH5Jsx, 
  isExternalUrl, 
  stripOptions 
} from "@dcloudio/uni-cli-shared";

// Vite configuration for H5 platform
export default {
  plugins: [
    vue(),
    {
      name: 'uni-h5-jsx',
      config() {
        return {
          esbuild: {
            jsx: 'automatic',
            jsxImportSource: 'vue'
          }
        };
      }
    }
  ],
  build: {
    rollupOptions: {
      plugins: [
        babel({
          plugins: [transformUniH5Jsx()]
        })
      ]
    }
  }
};

Template Asset Processing

import { isExternalUrl } from "@dcloudio/uni-cli-shared";

function processVueTemplate(template: string, baseUrl: string) {
  const urlPattern = /(src|href|url)\s*=\s*["']([^"']+)["']/g;
  
  return template.replace(urlPattern, (match, attr, url) => {
    if (isExternalUrl(url)) {
      // Keep external URLs as-is
      return match;
    } else {
      // Transform local URLs for build process
      const transformedUrl = transformLocalAsset(url, baseUrl);
      return `${attr}="${transformedUrl}"`;
    }
  });
}

SSR Configuration

import { stripOptions } from "@dcloudio/uni-cli-shared";

// SSR-specific build setup
const ssrConfig = {
  ssr: {
    format: 'cjs',
    target: 'node'
  },
  build: {
    ssr: true,
    rollupOptions: {
      plugins: [
        {
          name: 'strip-client-code',
          transform(code: string, id: string) {
            // Use stripOptions to remove client-only code
            if (stripOptions.include.some(pattern => 
              minimatch(id, pattern)
            )) {
              return stripClientOnlyCode(code, stripOptions.functions);
            }
          }
        }
      ]
    }
  }
};

Vue 3 Composition API Support

The Vue integration provides full support for Vue 3 Composition API patterns:

// Example component using Composition API with uni-app
import { ref, onMounted } from 'vue';
import { isExternalUrl } from "@dcloudio/uni-cli-shared";

export default {
  setup() {
    const imageUrl = ref('');
    
    onMounted(() => {
      const url = '/static/images/banner.jpg';
      if (!isExternalUrl(url)) {
        // Process local image for current platform
        imageUrl.value = processAssetUrl(url);
      } else {
        imageUrl.value = url;
      }
    });
    
    return {
      imageUrl
    };
  }
};

TypeScript Integration

Full TypeScript support with proper type definitions:

import type { Plugin } from 'vite';
import { transformUniH5Jsx, isExternalUrl } from "@dcloudio/uni-cli-shared";

const uniVuePlugin = (): Plugin => {
  return {
    name: 'uni-vue-integration',
    configResolved(config) {
      // Configure JSX transformation
      if (config.command === 'build') {
        config.plugins.push(
          babel({
            plugins: [transformUniH5Jsx()]
          })
        );
      }
    },
    transformIndexHtml(html: string) {
      // Process HTML template with URL checking
      return html.replace(/src="([^"]+)"/g, (match, url) => {
        return isExternalUrl(url) ? match : `src="${processLocalUrl(url)}"`;
      });
    }
  };
};

The Vue.js integration module provides comprehensive support for modern Vue development patterns while maintaining compatibility across uni-app's diverse platform targets.