CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-dcloudio--uni-cli-shared

Shared CLI utilities and tools for the uni-app cross-platform development framework

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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.

Install with Tessl CLI

npx tessl i tessl/npm-dcloudio--uni-cli-shared

docs

build-tools.md

constants-types.md

development-tools.md

filesystem.md

index.md

miniprogram.md

plugin-system.md

uts.md

vue-integration.md

tile.json