Shared CLI utilities and tools for the uni-app cross-platform development framework
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Vue.js specific transformations, component processing, template compilation, JSX support, and server-side rendering (SSR) configuration for uni-app development across multiple platforms.
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>
);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);
}
}
});
}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:
['**/*.js', '**/*.ts', '**/*.tsx', '**/*.vue']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 hooksThe Vue integration module provides comprehensive processing capabilities for Vue single-file components (SFCs), including:
// Template transformation utilities (from ./transforms)
// Complete API available through main export// Vue-specific utilities (from ./utils)
// Complete API available through main export// Vue SFC parsing utilities (from ./parse)
// Complete API available through main exportimport {
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()]
})
]
}
}
};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}"`;
}
});
}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);
}
}
}
]
}
}
};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
};
}
};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