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

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.

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