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

plugin-system.mddocs/

Plugin System

Extensible plugin architecture supporting uni_modules, cloud integration, native API extensions, and custom functionality for the uni-app ecosystem with comprehensive module management and encryption support.

Capabilities

uni_modules Core

Core plugin parsing and API extension management for uni_modules.

/**
 * Parses single uni extension API from module configuration
 * @returns Parsed API configuration object
 */
function parseUniExtApi(): any;

/**
 * Parses multiple uni extension APIs from modules
 * @returns Collection of parsed API configurations
 */
function parseUniExtApis(): any;

/**
 * Parses inject configurations for uni modules
 * @returns Parsed inject configuration for dependency injection
 */
function parseInjects(): any;

/**
 * Gets uni extension API provider registrations
 * @returns Provider registration configuration
 */
function getUniExtApiProviderRegisters(): any;

/**
 * Formats extension API provider names for consistent naming
 * @returns Formatted provider name
 */
function formatExtApiProviderName(): any;

Usage Example:

import { 
  parseUniExtApi,
  parseUniExtApis,
  parseInjects,
  getUniExtApiProviderRegisters,
  formatExtApiProviderName 
} from "@dcloudio/uni-cli-shared";

// Parse extension APIs from uni_modules
const singleApi = parseUniExtApi();
const allApis = parseUniExtApis();

console.log('Extension APIs:', allApis);

// Handle dependency injection
const injectConfig = parseInjects();
console.log('Inject configuration:', injectConfig);

// Register API providers
const providers = getUniExtApiProviderRegisters();
console.log('Registered providers:', providers);

// Format provider names
const formattedName = formatExtApiProviderName();

// Plugin registration workflow
class UniModuleManager {
  private apis: any = {};
  private providers: any = {};
  
  async initializeModules() {
    // Parse all available APIs
    this.apis = parseUniExtApis();
    
    // Get provider registrations
    this.providers = getUniExtApiProviderRegisters();
    
    // Setup dependency injection
    const injects = parseInjects();
    this.setupDependencyInjection(injects);
  }
  
  private setupDependencyInjection(injects: any) {
    // Configure module dependencies
    Object.entries(injects).forEach(([module, config]) => {
      this.registerModuleDependencies(module, config);
    });
  }
  
  private registerModuleDependencies(module: string, config: any) {
    console.log(`Registering dependencies for ${module}:`, config);
  }
}

Tree Shaking Support

Plugin management for build optimization and tree shaking.

/**
 * Returns list of plugins that should not be tree-shaken during build
 * @returns Array of plugin names to preserve in final bundle
 */
function getNonTreeShakingPlugins(): string[];

Usage Example:

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

// Get plugins that must be preserved
const preservePlugins = getNonTreeShakingPlugins();
console.log('Preserve these plugins:', preservePlugins);
// ['uni-push', 'uni-payment', 'uni-share', ...]

// Vite/Rollup configuration
export default {
  build: {
    rollupOptions: {
      // Prevent tree shaking of essential plugins
      external: preservePlugins,
      
      output: {
        manualChunks: {
          // Group non-tree-shakable plugins
          'uni-plugins': preservePlugins
        }
      }
    }
  }
};

// Webpack configuration
const webpackConfig = {
  optimization: {
    usedExports: true,
    sideEffects: [
      // Mark essential plugins as having side effects
      ...preservePlugins.map(plugin => `**/uni_modules/${plugin}/**`)
    ]
  }
};

Cloud Integration

Cloud-based uni_modules with encryption and artifact management.

/**
 * Gets encryption type for uni_modules cloud integration
 * @returns Encryption configuration for cloud modules
 */
function getUniModulesEncryptType(): any;

/**
 * Parses uni_modules artifacts for cloud deployment
 * @returns Parsed artifact configuration
 */
function parseUniModulesArtifacts(): any;

/**
 * Resolves encrypted uni module configurations
 * @returns Resolved encrypted module information
 */
function resolveEncryptUniModule(): any;

Usage Example:

import { 
  getUniModulesEncryptType,
  parseUniModulesArtifacts,
  resolveEncryptUniModule 
} from "@dcloudio/uni-cli-shared";

// Cloud module management
class UniCloudModuleManager {
  private encryptionType: any;
  private artifacts: any;
  
  async initializeCloudModules() {
    // Get encryption configuration
    this.encryptionType = getUniModulesEncryptType();
    console.log('Encryption type:', this.encryptionType);
    
    // Parse cloud artifacts
    this.artifacts = parseUniModulesArtifacts();
    console.log('Cloud artifacts:', this.artifacts);
    
    // Resolve encrypted modules
    const encryptedModules = resolveEncryptUniModule();
    console.log('Encrypted modules:', encryptedModules);
  }
  
  async downloadCloudModule(moduleId: string) {
    const encryptConfig = this.encryptionType;
    const artifacts = this.artifacts[moduleId];
    
    if (artifacts && encryptConfig) {
      return this.decryptAndInstallModule(moduleId, artifacts, encryptConfig);
    }
    
    throw new Error(`Cloud module not found: ${moduleId}`);
  }
  
  private async decryptAndInstallModule(
    moduleId: string, 
    artifacts: any, 
    encryptConfig: any
  ) {
    // Decrypt and install cloud module
    console.log(`Installing encrypted module: ${moduleId}`);
    
    // Implementation would handle:
    // 1. Download encrypted artifacts
    // 2. Decrypt using provided configuration
    // 3. Install to local uni_modules directory
    // 4. Register APIs and dependencies
  }
}

// Usage in build process
const cloudManager = new UniCloudModuleManager();
await cloudManager.initializeCloudModules();

// Install specific cloud module
try {
  await cloudManager.downloadCloudModule('uni-cloud-auth');
} catch (error) {
  console.error('Failed to install cloud module:', error);
}

Type Definitions

Type system for plugin configuration and options.

/**
 * Configuration options for defines in uni_modules
 */
interface DefineOptions {
  /** Optional name for the define */
  name?: string;
  /** App-specific configuration */
  app?: any;
  /** Extensible configuration properties */
  [key: string]: any;
}

/**
 * Define value types - can be string, array, record, or disabled
 */
type Define = string | string[] | Record<string, any> | false;

/**
 * Collection of define values keyed by name
 */
type Defines = Record<string, Define>;

/**
 * Export configuration supporting defines or boolean disable
 */
type Exports = Record<string, Define | Defines | false>;

Usage Example:

import type { 
  DefineOptions, 
  Define, 
  Defines, 
  Exports 
} from "@dcloudio/uni-cli-shared";

// Plugin configuration examples
const defineOptions: DefineOptions = {
  name: 'uni-geolocation',
  app: {
    permissions: ['ACCESS_FINE_LOCATION'],
    features: ['gps', 'network']
  },
  platforms: ['app-plus', 'h5', 'mp-weixin']
};

const apiDefine: Define = {
  methods: ['getCurrentPosition', 'watchPosition'],
  events: ['locationChange', 'locationError']
};

const moduleDefines: Defines = {
  'uni-geolocation': apiDefine,
  'uni-camera': ['takePhoto', 'chooseImage'],
  'uni-storage': {
    sync: ['getStorageSync', 'setStorageSync'],
    async: ['getStorage', 'setStorage']
  }
};

const moduleExports: Exports = {
  'apis': moduleDefines,
  'components': false, // Disabled
  'styles': {
    'default': './styles/default.css',
    'dark': './styles/dark.css'
  }
};

// Plugin definition class
class UniModulePlugin {
  private options: DefineOptions;
  private defines: Defines;
  private exports: Exports;
  
  constructor(options: DefineOptions) {
    this.options = options;
    this.defines = {};
    this.exports = {};
  }
  
  addDefine(name: string, define: Define): void {
    this.defines[name] = define;
  }
  
  setExports(exports: Exports): void {
    this.exports = exports;
  }
  
  build(): any {
    return {
      options: this.options,
      defines: this.defines,
      exports: this.exports
    };
  }
}

Plugin Development Workflow

Module Creation

import { 
  parseUniExtApi,
  formatExtApiProviderName 
} from "@dcloudio/uni-cli-shared";

// Create new uni_module plugin
class CustomUniModule {
  private config: any;
  
  constructor(moduleName: string) {
    this.config = {
      name: moduleName,
      version: '1.0.0',
      type: 'uni-module'
    };
  }
  
  defineAPI(apiConfig: any) {
    // Use parseUniExtApi to validate configuration
    const parsedApi = parseUniExtApi();
    
    // Format provider name
    const providerName = formatExtApiProviderName();
    
    this.config.api = {
      ...parsedApi,
      provider: providerName
    };
    
    return this;
  }
  
  addDependencies(deps: string[]) {
    this.config.dependencies = deps;
    return this;
  }
  
  build() {
    return this.config;
  }
}

// Usage
const geoModule = new CustomUniModule('uni-geo-advanced')
  .defineAPI({
    methods: ['getLocationWithAccuracy', 'startLocationTracking'],
    permissions: ['location']
  })
  .addDependencies(['uni-base', 'uni-storage'])
  .build();

Plugin Registration

import { 
  getUniExtApiProviderRegisters,
  parseInjects 
} from "@dcloudio/uni-cli-shared";

// Register plugin in ecosystem
class PluginRegistry {
  private plugins: Map<string, any> = new Map();
  
  async registerPlugin(plugin: any) {
    // Get existing registrations
    const existingProviders = getUniExtApiProviderRegisters();
    
    // Parse injection requirements
    const injects = parseInjects();
    
    // Validate plugin dependencies
    if (plugin.dependencies) {
      this.validateDependencies(plugin.dependencies);
    }
    
    // Register plugin
    this.plugins.set(plugin.name, plugin);
    
    console.log(`Registered plugin: ${plugin.name}`);
  }
  
  private validateDependencies(deps: string[]) {
    deps.forEach(dep => {
      if (!this.plugins.has(dep)) {
        throw new Error(`Dependency not found: ${dep}`);
      }
    });
  }
  
  getPlugin(name: string) {
    return this.plugins.get(name);
  }
  
  getAllPlugins() {
    return Array.from(this.plugins.values());
  }
}

Cloud Plugin Deployment

import { 
  parseUniModulesArtifacts,
  getUniModulesEncryptType 
} from "@dcloudio/uni-cli-shared";

// Deploy plugin to cloud
class CloudPluginDeployer {
  async deployPlugin(plugin: any, encryption: boolean = true) {
    // Parse artifacts for deployment
    const artifacts = parseUniModulesArtifacts();
    
    if (encryption) {
      // Get encryption configuration
      const encryptType = getUniModulesEncryptType();
      
      // Encrypt plugin files
      const encryptedPlugin = await this.encryptPlugin(plugin, encryptType);
      
      return this.uploadToCloud(encryptedPlugin, artifacts);
    } else {
      return this.uploadToCloud(plugin, artifacts);
    }
  }
  
  private async encryptPlugin(plugin: any, encryptType: any) {
    // Encrypt plugin implementation
    console.log(`Encrypting plugin with ${encryptType}`);
    return plugin; // Encrypted version
  }
  
  private async uploadToCloud(plugin: any, artifacts: any) {
    console.log('Uploading to cloud:', plugin.name);
    // Cloud upload implementation
    return { success: true, cloudId: `cloud-${plugin.name}` };
  }
}

The plugin system provides a comprehensive architecture for extending uni-app functionality through modular, cloud-enabled, and encrypted plugin distribution, enabling developers to create and share powerful extensions across the uni-app ecosystem.