diff --git a/packages/uni-cli-shared/src/index.ts b/packages/uni-cli-shared/src/index.ts
index 09f2654dece16914fb0b6defe0756b67add72ff9..8552832818d8005c1f0a6f0c08f21fda0d797f57 100644
--- a/packages/uni-cli-shared/src/index.ts
+++ b/packages/uni-cli-shared/src/index.ts
@@ -2,8 +2,9 @@ export * from './fs'
export * from './mp'
export * from './env'
export * from './hbx'
-export * from './logs'
export * from './ssr'
+export * from './vue'
+export * from './logs'
export * from './i18n'
export * from './deps'
export * from './json'
@@ -16,7 +17,6 @@ export * from './postcss'
export * from './filter'
export * from './esbuild'
-export * from './vue/transforms'
export { M } from './messages'
export * from './exports'
diff --git a/packages/uni-cli-shared/src/vue/index.ts b/packages/uni-cli-shared/src/vue/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f1f62a9f8eac708976299e03176badad88665bfe
--- /dev/null
+++ b/packages/uni-cli-shared/src/vue/index.ts
@@ -0,0 +1,2 @@
+export * from './transforms'
+export * from './utils'
diff --git a/packages/uni-cli-shared/src/vue/transforms/transformComponent.ts b/packages/uni-cli-shared/src/vue/transforms/transformComponent.ts
index 8b65d5aec14b1ee86f5c6c8545434ff350cbdd5c..4324ac1d9147ae96d18f8f8a7d44a46aa0775546 100644
--- a/packages/uni-cli-shared/src/vue/transforms/transformComponent.ts
+++ b/packages/uni-cli-shared/src/vue/transforms/transformComponent.ts
@@ -1,8 +1,5 @@
-import { isComponentTag } from '@dcloudio/uni-shared'
import {
createSimpleExpression,
- ElementTypes,
- isCoreComponent,
locStub,
NodeTypes,
RootNode,
@@ -10,6 +7,7 @@ import {
TransformContext,
} from '@vue/compiler-core'
import { COMPONENT_BIND_LINK, COMPONENT_ON_LINK } from '../../mp/constants'
+import { isUserComponent } from '../utils'
export function createTransformComponentLink(
name: typeof COMPONENT_BIND_LINK | typeof COMPONENT_ON_LINK
@@ -18,26 +16,16 @@ export function createTransformComponentLink(
node: RootNode | TemplateChildNode,
context: TransformContext
) {
- if (
- node.type === NodeTypes.ELEMENT &&
- node.tagType === ElementTypes.COMPONENT
- ) {
- const { tag } = node
- if (
- isComponentTag(tag) ||
- isCoreComponent(tag) ||
- context.isBuiltInComponent(tag)
- ) {
- return
- }
- node.props.push({
- type: NodeTypes.DIRECTIVE,
- name: 'on',
- modifiers: [],
- loc: locStub,
- arg: createSimpleExpression(name, true),
- exp: createSimpleExpression('__l', true),
- })
+ if (!isUserComponent(node, context)) {
+ return
}
+ node.props.push({
+ type: NodeTypes.DIRECTIVE,
+ name: 'on',
+ modifiers: [],
+ loc: locStub,
+ arg: createSimpleExpression(name, true),
+ exp: createSimpleExpression('__l', true),
+ })
}
}
diff --git a/packages/uni-cli-shared/src/vue/utils.ts b/packages/uni-cli-shared/src/vue/utils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e8fc1844a494b4864d0f864c3529639f0357844
--- /dev/null
+++ b/packages/uni-cli-shared/src/vue/utils.ts
@@ -0,0 +1,23 @@
+import { isComponentTag } from '@dcloudio/uni-shared'
+import {
+ ComponentNode,
+ ElementTypes,
+ isCoreComponent,
+ NodeTypes,
+ RootNode,
+ TemplateChildNode,
+ TransformContext,
+} from '@vue/compiler-core'
+
+export function isUserComponent(
+ node: RootNode | TemplateChildNode,
+ context: TransformContext
+): node is ComponentNode {
+ return (
+ node.type === NodeTypes.ELEMENT &&
+ node.tagType === ElementTypes.COMPONENT &&
+ !isComponentTag(node.tag) &&
+ !isCoreComponent(node.tag) &&
+ !context.isBuiltInComponent(node.tag)
+ )
+}
diff --git a/packages/uni-mp-alipay/build.json b/packages/uni-mp-alipay/build.json
index b15ef80001cf2d93cb75884ec4a8497a9a24cee6..57aec615dc5d8bb1011320e105e8772c3d66af1f 100644
--- a/packages/uni-mp-alipay/build.json
+++ b/packages/uni-mp-alipay/build.json
@@ -1,24 +1,35 @@
-{
- "input": {
- "src/runtime/index.ts": "dist/uni.mp.esm.js",
- "src/api/index.ts": "dist/uni.api.esm.js"
+[
+ {
+ "input": {
+ "src/compiler/index.ts": "dist/uni.compiler.js"
+ },
+ "output": {
+ "format": "cjs"
+ },
+ "external": ["@dcloudio/uni-cli-shared", "@dcloudio/uni-mp-vite"]
},
- "alias": {
- "entries": [
- {
- "find": "@dcloudio/uni-platform",
- "replacement": "packages/uni-mp-alipay/src/platform/index.ts"
- },
- {
- "find": "@dcloudio/uni-mp-platform",
- "replacement": "packages/uni-mp-core/src/platform/index.ts"
- }
- ]
- },
- "replacements": {
- "__GLOBAL__": "my",
- "__PLATFORM__": "\"mp-alipay\"",
- "__PLATFORM_TITLE__": "支付宝小程序"
- },
- "external": ["@dcloudio/uni-i18n", "@vue/shared", "vue"]
-}
+ {
+ "input": {
+ "src/runtime/index.ts": "dist/uni.mp.esm.js",
+ "src/api/index.ts": "dist/uni.api.esm.js"
+ },
+ "alias": {
+ "entries": [
+ {
+ "find": "@dcloudio/uni-platform",
+ "replacement": "packages/uni-mp-alipay/src/platform/index.ts"
+ },
+ {
+ "find": "@dcloudio/uni-mp-platform",
+ "replacement": "packages/uni-mp-core/src/platform/index.ts"
+ }
+ ]
+ },
+ "replacements": {
+ "__GLOBAL__": "my",
+ "__PLATFORM__": "\"mp-alipay\"",
+ "__PLATFORM_TITLE__": "支付宝小程序"
+ },
+ "external": ["@dcloudio/uni-i18n", "@vue/shared", "vue"]
+ }
+]
diff --git a/packages/uni-mp-alipay/dist/uni.compiler.js b/packages/uni-mp-alipay/dist/uni.compiler.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b1e76658d69729c3d242c2b94e1fd9dd8216322
--- /dev/null
+++ b/packages/uni-mp-alipay/dist/uni.compiler.js
@@ -0,0 +1,86 @@
+'use strict';
+
+var initMiniProgramPlugin = require('@dcloudio/uni-mp-vite');
+var path = require('path');
+var uniCliShared = require('@dcloudio/uni-cli-shared');
+
+function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
+
+var initMiniProgramPlugin__default = /*#__PURE__*/_interopDefaultLegacy(initMiniProgramPlugin);
+var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
+
+var component2 = true;
+var enableAppxNg = true;
+var source = {
+ component2: component2,
+ enableAppxNg: enableAppxNg
+};
+
+const projectConfigFilename = 'mini.project.json';
+const options = {
+ vite: {
+ inject: {
+ uni: [path__default["default"].resolve(__dirname, 'uni.api.esm.js'), 'default'],
+ },
+ alias: {
+ 'uni-mp-runtime': path__default["default"].resolve(__dirname, 'uni.mp.esm.js'),
+ },
+ copyOptions: {
+ assets: ['mycomponents'],
+ },
+ },
+ global: 'my',
+ app: {
+ darkmode: false,
+ subpackages: true,
+ },
+ project: {
+ filename: projectConfigFilename,
+ source,
+ },
+ template: {
+ class: {
+ array: false,
+ },
+ filter: {
+ extname: '.sjs',
+ lang: 'sjs',
+ generate(filter, filename) {
+ if (filename) {
+ return ``;
+ }
+ return `
+${filter.code}
+`;
+ },
+ },
+ slot: {
+ fallback: true,
+ },
+ extname: '.axml',
+ directive: 'a:',
+ compilerOptions: {
+ nodeTransforms: [uniCliShared.createTransformComponentLink(uniCliShared.COMPONENT_ON_LINK)],
+ },
+ },
+ style: {
+ extname: '.acss',
+ },
+};
+
+const uniMiniProgramAlipayPlugin = {
+ name: 'vite:uni-mp-alipay',
+ config() {
+ return {
+ define: {
+ __VUE_CREATED_DEFERRED__: false,
+ },
+ build: {
+ assetsInlineLimit: 0,
+ },
+ };
+ },
+};
+var index = [uniMiniProgramAlipayPlugin, ...initMiniProgramPlugin__default["default"](options)];
+
+module.exports = index;
diff --git a/packages/uni-mp-alipay/src/compiler/index.ts b/packages/uni-mp-alipay/src/compiler/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0d7e29b0e703dbf6cd593beb5355894dbe2762e2
--- /dev/null
+++ b/packages/uni-mp-alipay/src/compiler/index.ts
@@ -0,0 +1,20 @@
+import { Plugin } from 'vite'
+import initMiniProgramPlugin from '@dcloudio/uni-mp-vite'
+
+import { options } from './options'
+
+const uniMiniProgramAlipayPlugin: Plugin = {
+ name: 'vite:uni-mp-alipay',
+ config() {
+ return {
+ define: {
+ __VUE_CREATED_DEFERRED__: false,
+ },
+ build: {
+ assetsInlineLimit: 0,
+ },
+ }
+ },
+}
+
+export default [uniMiniProgramAlipayPlugin, ...initMiniProgramPlugin(options)]
diff --git a/packages/uni-mp-alipay/src/compiler/mini.project.json b/packages/uni-mp-alipay/src/compiler/mini.project.json
new file mode 100644
index 0000000000000000000000000000000000000000..59d9114dda878f1b8aee55069785a78f82f84c43
--- /dev/null
+++ b/packages/uni-mp-alipay/src/compiler/mini.project.json
@@ -0,0 +1,4 @@
+{
+ "component2": true,
+ "enableAppxNg": true
+}
diff --git a/packages/uni-mp-alipay/src/compiler/options.ts b/packages/uni-mp-alipay/src/compiler/options.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9d32868f730ef1917e5ad34bd897c644aab0b5fc
--- /dev/null
+++ b/packages/uni-mp-alipay/src/compiler/options.ts
@@ -0,0 +1,61 @@
+import path from 'path'
+import {
+ COMPONENT_ON_LINK,
+ createTransformComponentLink,
+} from '@dcloudio/uni-cli-shared'
+import { UniMiniProgramPluginOptions } from '@dcloudio/uni-mp-vite'
+
+import source from './mini.project.json'
+
+const projectConfigFilename = 'mini.project.json'
+
+export const options: UniMiniProgramPluginOptions = {
+ vite: {
+ inject: {
+ uni: [path.resolve(__dirname, 'uni.api.esm.js'), 'default'],
+ },
+ alias: {
+ 'uni-mp-runtime': path.resolve(__dirname, 'uni.mp.esm.js'),
+ },
+ copyOptions: {
+ assets: ['mycomponents'],
+ },
+ },
+ global: 'my',
+ app: {
+ darkmode: false,
+ subpackages: true,
+ },
+ project: {
+ filename: projectConfigFilename,
+ source,
+ },
+ template: {
+ class: {
+ array: false,
+ },
+ filter: {
+ extname: '.sjs',
+ lang: 'sjs',
+ generate(filter, filename) {
+ if (filename) {
+ return ``
+ }
+ return `
+${filter.code}
+`
+ },
+ },
+ slot: {
+ fallback: true,
+ },
+ extname: '.axml',
+ directive: 'a:',
+ compilerOptions: {
+ nodeTransforms: [createTransformComponentLink(COMPONENT_ON_LINK)],
+ },
+ },
+ style: {
+ extname: '.acss',
+ },
+}
diff --git a/packages/uni-mp-baidu/dist/uni.compiler.js b/packages/uni-mp-baidu/dist/uni.compiler.js
index a079bd609392ffc03f827721e60bf8015ee1cba5..b62e95f02f70b310e965c795cbb5dd1d4f417443 100644
--- a/packages/uni-mp-baidu/dist/uni.compiler.js
+++ b/packages/uni-mp-baidu/dist/uni.compiler.js
@@ -3,6 +3,7 @@
var initMiniProgramPlugin = require('@dcloudio/uni-mp-vite');
var path = require('path');
var uniMpCompiler = require('@dcloudio/uni-mp-compiler');
+var uniCliShared = require('@dcloudio/uni-cli-shared');
var compilerCore = require('@vue/compiler-core');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -66,7 +67,7 @@ const transformOn = (dir, node, context, augmentor) => {
!exp ||
!compilerCore.isStaticExp(arg) ||
!isCustomEvent(arg.content) ||
- !uniMpCompiler.isUserComponent(node, context)) {
+ !uniCliShared.isUserComponent(node, context)) {
return res;
}
const value = res.props[0].value;
@@ -134,7 +135,7 @@ function isCustomEvent(name) {
const transformModel = (dir, node, context, augmentor) => {
const res = uniMpCompiler.transformModel(dir, node, context, augmentor);
const props = res.props;
- if (props.length < 2 || !uniMpCompiler.isUserComponent(node, context)) {
+ if (props.length < 2 || !uniCliShared.isUserComponent(node, context)) {
return res;
}
const { arg, exp } = props[1];
diff --git a/packages/uni-mp-baidu/src/compiler/transforms/vModel.ts b/packages/uni-mp-baidu/src/compiler/transforms/vModel.ts
index 89871e2fe4c7e5c8b7523f76ffc7a14cd237f380..2a7b3fc91d22f0809241c64a947c80b0c236ab7a 100644
--- a/packages/uni-mp-baidu/src/compiler/transforms/vModel.ts
+++ b/packages/uni-mp-baidu/src/compiler/transforms/vModel.ts
@@ -1,7 +1,7 @@
+import { isUserComponent } from '@dcloudio/uni-cli-shared'
import {
DirectiveNode,
DirectiveTransform,
- isUserComponent,
SimpleExpressionNode,
transformModel as baseTransformModel,
} from '@dcloudio/uni-mp-compiler'
diff --git a/packages/uni-mp-baidu/src/compiler/transforms/vOn.ts b/packages/uni-mp-baidu/src/compiler/transforms/vOn.ts
index 30757a8622567cfbb63d636560489944621336e5..821dd514d5958eaf142147ae268c79801f4cd12a 100644
--- a/packages/uni-mp-baidu/src/compiler/transforms/vOn.ts
+++ b/packages/uni-mp-baidu/src/compiler/transforms/vOn.ts
@@ -1,6 +1,6 @@
+import { isUserComponent } from '@dcloudio/uni-cli-shared'
import {
DirectiveTransform,
- isUserComponent,
transformOn as baseTransformOn,
} from '@dcloudio/uni-mp-compiler'
import {
diff --git a/packages/uni-mp-compiler/__tests__/test.spec.ts b/packages/uni-mp-compiler/__tests__/test.spec.ts
index 14970300bb5c9e8c38d4756a6ba7b8c6727bd8f1..ab743625113223514740861628a8519a6f39f073 100644
--- a/packages/uni-mp-compiler/__tests__/test.spec.ts
+++ b/packages/uni-mp-compiler/__tests__/test.spec.ts
@@ -38,10 +38,10 @@ function assert(
describe('compiler', () => {
test('scope', () => {
assert(
- `{{error.message}}`,
- `{{v0.b}}`,
+ ``,
+ ``,
`(_ctx, _cache) => {
- return { a: _w(({ data, loading, error, options }, s0, i0) => { return _e({ a: error }, error ? { b: _t(error.message) } : {}, { c: s0 }); }, { name: 'default', vueId: '2a9ec0b0-0' }) }
+ return { a: _ctx.custom }
}`
)
})
diff --git a/packages/uni-mp-compiler/src/index.ts b/packages/uni-mp-compiler/src/index.ts
index 76da48ff6f97edc2ee255fa024ba452c2633e874..7b09d4d5369b06123f7d56b64483f120df91a9a0 100644
--- a/packages/uni-mp-compiler/src/index.ts
+++ b/packages/uni-mp-compiler/src/index.ts
@@ -22,7 +22,6 @@ export type {
export { genExpr } from './codegen'
export { isForElementNode } from './transforms/vFor'
-export { isUserComponent } from './transforms/utils'
export { transformOn } from './transforms/vOn'
export { transformModel } from './transforms/vModel'
export * from './runtimeHelpers'
diff --git a/packages/uni-mp-compiler/src/transforms/transformComponent.ts b/packages/uni-mp-compiler/src/transforms/transformComponent.ts
index 2eae4cf87753698e5b359ed2c147b538823e10c4..09d7bccba725fbe5c3063d55d055d0aeb95e76d0 100644
--- a/packages/uni-mp-compiler/src/transforms/transformComponent.ts
+++ b/packages/uni-mp-compiler/src/transforms/transformComponent.ts
@@ -1,18 +1,19 @@
-import { ComponentNode, findProp } from '@vue/compiler-core'
+import {
+ ComponentNode,
+ findProp,
+ NodeTypes,
+ SimpleExpressionNode,
+} from '@vue/compiler-core'
+import { isUserComponent } from '@dcloudio/uni-cli-shared'
import { isVForScope, NodeTransform, TransformContext } from '../transform'
import { createAttributeNode, createBindDirectiveNode } from '../ast'
import { addStaticClass } from './transformElement'
-import {
- ATTR_VUE_ID,
- CLASS_VUE_REF,
- CLASS_VUE_REF_IN_FOR,
- isUserComponent,
-} from './utils'
+import { ATTR_VUE_ID, CLASS_VUE_REF, CLASS_VUE_REF_IN_FOR } from './utils'
import { CodegenScope } from '../options'
import { isScopedSlotVFor } from './vSlot'
export const transformComponent: NodeTransform = (node, context) => {
- if (!isUserComponent(node, context)) {
+ if (!isUserComponent(node, context as any)) {
return
}
addVueRef(node, context)
@@ -62,9 +63,16 @@ function addVueId(node: ComponentNode, context: TransformContext) {
function addVueRef(node: ComponentNode, context: TransformContext) {
// 仅配置了 ref 属性的,才需要增补 vue-ref
- if (!findProp(node, 'ref')) {
+ const refProp = findProp(node, 'ref')
+ if (!refProp) {
return
}
+ if (refProp.type === NodeTypes.ATTRIBUTE) {
+ refProp.name = 'data-ref'
+ } else {
+ ;(refProp.arg as SimpleExpressionNode).content = 'data-ref'
+ }
+
return addStaticClass(
node,
// vue-ref-in-for
diff --git a/packages/uni-mp-compiler/src/transforms/transformElement.ts b/packages/uni-mp-compiler/src/transforms/transformElement.ts
index 795499cd489533855e7f68c5dc209b6c7ba302b9..4cb37d000986862eca754c132200ab1d161435eb 100644
--- a/packages/uni-mp-compiler/src/transforms/transformElement.ts
+++ b/packages/uni-mp-compiler/src/transforms/transformElement.ts
@@ -202,12 +202,7 @@ export function processProps(
for (let i = 0; i < props.length; i++) {
const prop = props[i]
- if (prop.type === NodeTypes.ATTRIBUTE) {
- // =>
- if (prop.name === 'ref') {
- prop.name = 'data-ref'
- }
- } else {
+ if (prop.type === NodeTypes.DIRECTIVE) {
// directives
const { name, arg, loc } = prop
const isVBind = name === 'bind'
@@ -264,16 +259,6 @@ export function processProps(
}
}
- if (isVBind) {
- // =>
- if (
- arg?.type === NodeTypes.SIMPLE_EXPRESSION &&
- arg.content === 'ref'
- ) {
- arg.content = 'data-ref'
- }
- }
-
const directiveTransform = context.directiveTransforms[name]
if (name !== 'model' && directiveTransform) {
const { props } = directiveTransform(prop, node, context as any)
diff --git a/packages/uni-mp-compiler/src/transforms/utils.ts b/packages/uni-mp-compiler/src/transforms/utils.ts
index 95b75bc9ef22cdf37cb599fc09a8650e9589e033..03485e9da7c8da342ee44331d436baee4d42d693 100644
--- a/packages/uni-mp-compiler/src/transforms/utils.ts
+++ b/packages/uni-mp-compiler/src/transforms/utils.ts
@@ -11,18 +11,11 @@ import {
SpreadElement,
stringLiteral,
} from '@babel/types'
-import { isComponentTag } from '@dcloudio/uni-shared'
import {
- ComponentNode,
createSimpleExpression,
- ElementTypes,
ExpressionNode,
- isCoreComponent,
NodeTypes,
- RootNode,
SourceLocation,
- TemplateChildNode,
- TransformContext as VueTransformContext,
} from '@vue/compiler-core'
import { walk, BaseNode } from 'estree-walker'
import { isUndefined, parseExpr } from '../ast'
@@ -36,19 +29,6 @@ export const CLASS_VUE_REF = 'v-r'
export const CLASS_VUE_REF_IN_FOR = 'v-r-i-f'
export const SCOPED_SLOT_IDENTIFIER = '__SCOPED_SLOT__'
-export function isUserComponent(
- node: RootNode | TemplateChildNode,
- context: TransformContext | VueTransformContext
-): node is ComponentNode {
- return (
- node.type === NodeTypes.ELEMENT &&
- node.tagType === ElementTypes.COMPONENT &&
- !isComponentTag(node.tag) &&
- !isCoreComponent(node.tag) &&
- !context.isBuiltInComponent(node.tag)
- )
-}
-
export function rewriteSpreadElement(
name: symbol,
expr: SpreadElement,
diff --git a/packages/uni-mp-compiler/src/transforms/vSlot.ts b/packages/uni-mp-compiler/src/transforms/vSlot.ts
index 00dd3be070bc97af1a17dd37ef0b76a71dcfcd8e..44fe64148d7e0ad9c993fd3c95558ca653907c78 100644
--- a/packages/uni-mp-compiler/src/transforms/vSlot.ts
+++ b/packages/uni-mp-compiler/src/transforms/vSlot.ts
@@ -25,6 +25,7 @@ import {
TemplateChildNode,
TemplateNode,
} from '@vue/compiler-core'
+import { isUserComponent } from '@dcloudio/uni-cli-shared'
import { WITH_SCOPED_SLOT } from '../runtimeHelpers'
import { createBindDirectiveNode, parseExpr } from '../ast'
import { genExpr } from '../codegen'
@@ -33,14 +34,13 @@ import { isVForScope, NodeTransform, TransformContext } from '../transform'
import {
ATTR_VUE_ID,
ATTR_VUE_SLOTS,
- isUserComponent,
rewriteExpressionWithoutProperty,
SCOPED_SLOT_IDENTIFIER,
} from './utils'
import { createVForArrowFunctionExpression } from './vFor'
export const transformSlot: NodeTransform = (node, context) => {
- if (!isUserComponent(node, context)) {
+ if (!isUserComponent(node, context as any)) {
return
}