diff --git a/packages/code-generator/demo/demo.js b/packages/code-generator/demo/demo.js index 28b741f4a..2b6e02f52 100644 --- a/packages/code-generator/demo/demo.js +++ b/packages/code-generator/demo/demo.js @@ -171,5 +171,5 @@ function exportProject() { // main(); // exportModule(); -// exportProject(); -demo(); +exportProject(); +// demo(); diff --git a/packages/code-generator/src/parser/SchemaParser.ts b/packages/code-generator/src/parser/SchemaParser.ts index c16f06e2e..910f810c0 100644 --- a/packages/code-generator/src/parser/SchemaParser.ts +++ b/packages/code-generator/src/parser/SchemaParser.ts @@ -146,7 +146,7 @@ class SchemaParser implements ISchemaParser { } } } - return ['']; + return ''; }, }, { @@ -236,7 +236,7 @@ class SchemaParser implements ISchemaParser { return handleSubNodes( children, { - node: (i: NodeSchema) => [i.componentName], + node: (i: NodeSchema) => i.componentName, }, { rerun: true, diff --git a/packages/code-generator/src/plugins/common/esmodule.ts b/packages/code-generator/src/plugins/common/esmodule.ts index 54dce18e2..49b26439a 100644 --- a/packages/code-generator/src/plugins/common/esmodule.ts +++ b/packages/code-generator/src/plugins/common/esmodule.ts @@ -50,7 +50,12 @@ function groupDepsByPack(deps: IDependency[]): Record { return depMap; } -function buildPackageImport(pkg: string, deps: IDependency[], targetFileType: string): ICodeChunk[] { +function buildPackageImport( + pkg: string, + deps: IDependency[], + targetFileType: string, + useAliasName: boolean, +): ICodeChunk[] { const chunks: ICodeChunk[] = []; let defaultImport = ''; let defaultImportAs = ''; @@ -60,20 +65,8 @@ function buildPackageImport(pkg: string, deps: IDependency[], targetFileType: st const srcName = dep.exportName; let targetName = dep.componentName || dep.exportName; + // 如果是自组件,则导出父组件,并且根据自组件命名规则,判断是否需要定义标识符 if (dep.subName) { - chunks.push({ - type: ChunkType.STRING, - fileType: targetFileType, - name: COMMON_CHUNK_NAME.ImportAliasDefine, - content: `const ${targetName} = ${srcName}.${dep.subName};`, - linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport], - ext: { - originalName: `${srcName}.${dep.subName}`, - aliasName: targetName, - dependency: dep, - }, - }); - if (targetName !== `${srcName}.${dep.subName}`) { if (!isValidIdentifier(targetName)) { throw new CodeGeneratorError(`Invalid Identifier [${targetName}]`); @@ -82,9 +75,14 @@ function buildPackageImport(pkg: string, deps: IDependency[], targetFileType: st chunks.push({ type: ChunkType.STRING, fileType: targetFileType, - name: COMMON_CHUNK_NAME.FileVarDefine, + name: COMMON_CHUNK_NAME.ImportAliasDefine, content: `const ${targetName} = ${srcName}.${dep.subName};`, linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport], + ext: { + originalName: `${srcName}.${dep.subName}`, + aliasName: targetName, + dependency: dep, + }, }); } @@ -94,30 +92,35 @@ function buildPackageImport(pkg: string, deps: IDependency[], targetFileType: st if (dep.destructuring) { imports[srcName] = targetName; } else if (defaultImport) { - // 有些时候,可能已经从某个包里引入了一个东东,但是希望能再起个别名,这时候用赋值语句代替 - chunks.push({ - type: ChunkType.STRING, - fileType: targetFileType, - name: COMMON_CHUNK_NAME.ImportAliasDefine, - content: `const ${targetName} = ${defaultImportAs};`, - linkAfter: [COMMON_CHUNK_NAME.InternalDepsImport, COMMON_CHUNK_NAME.ExternalDepsImport], - ext: { - originalName: defaultImportAs, - aliasName: targetName, - dependency: dep, - }, - }); + throw new CodeGeneratorError(`[${pkg}] has more than one default export.`); } else { defaultImport = srcName; defaultImportAs = targetName; } + + if (targetName !== srcName) { + chunks.push({ + type: ChunkType.STRING, + fileType: targetFileType, + name: COMMON_CHUNK_NAME.ImportAliasDefine, + content: '', + linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport], + ext: { + originalName: srcName, + aliasName: targetName, + dependency: dep, + }, + }); + } }); - const items = Object.keys(imports).map((src) => (src === imports[src] ? src : `${src} as ${imports[src]}`)); + const items = Object.keys(imports).map((src) => + src === imports[src] || !useAliasName ? src : `${src} as ${imports[src]}`, + ); const statementL = ['import']; if (defaultImport) { - statementL.push(defaultImportAs); + statementL.push(useAliasName ? defaultImportAs : defaultImport); if (items.length > 0) { statementL.push(','); } @@ -152,13 +155,15 @@ function buildPackageImport(pkg: string, deps: IDependency[], targetFileType: st } type PluginConfig = { - fileType: string; + fileType?: string; // 导出的文件类型 + useAliasName?: boolean; // 是否使用 componentName 重命名组件 identifier }; const pluginFactory: BuilderComponentPluginFactory = (config?: PluginConfig) => { - const cfg: PluginConfig = { + const cfg = { fileType: FileType.JS, - ...config, + useAliasName: true, + ...(config || {}), }; const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => { @@ -172,7 +177,7 @@ const pluginFactory: BuilderComponentPluginFactory = (config?: Plu const packs = groupDepsByPack(ir.deps); Object.keys(packs).forEach((pkg) => { - const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType); + const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType, cfg.useAliasName); next.chunks.push(...chunks); }); } diff --git a/packages/code-generator/src/plugins/component/rax/containerLifeCycle.ts b/packages/code-generator/src/plugins/component/rax/containerLifeCycle.ts index ea9d92ee2..18119a572 100644 --- a/packages/code-generator/src/plugins/component/rax/containerLifeCycle.ts +++ b/packages/code-generator/src/plugins/component/rax/containerLifeCycle.ts @@ -1,19 +1,11 @@ -import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator'; -import { RAX_CHUNK_NAME } from './const'; +// import { JSExpression } from '@ali/lowcode-types'; -import { getFuncExprBody, transformFuncExpr2MethodMember } from '../../../utils/jsExpression'; +// import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator'; +// import { RAX_CHUNK_NAME } from './const'; -import { - BuilderComponentPlugin, - BuilderComponentPluginFactory, - ChunkType, - CodeGeneratorError, - FileType, - ICodeChunk, - ICodeStruct, - IContainerInfo, - JSExpression, -} from '../../../types'; +// import { getFuncExprBody, transformFuncExpr2MethodMember } from '../../../utils/jsExpression'; + +import { BuilderComponentPlugin, BuilderComponentPluginFactory, ICodeStruct } from '../../../types'; type PluginConfig = { fileType: string; @@ -22,12 +14,12 @@ type PluginConfig = { }; const pluginFactory: BuilderComponentPluginFactory = (config?) => { - const cfg: PluginConfig = { - fileType: FileType.JSX, - exportNameMapping: {}, - normalizeNameMapping: {}, - ...config, - }; + // const cfg: PluginConfig = { + // fileType: FileType.JSX, + // exportNameMapping: {}, + // normalizeNameMapping: {}, + // ...config, + // }; const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => { const next: ICodeStruct = { diff --git a/packages/code-generator/src/plugins/component/rax/containerMethods.ts b/packages/code-generator/src/plugins/component/rax/containerMethods.ts index b13c81071..833831bda 100644 --- a/packages/code-generator/src/plugins/component/rax/containerMethods.ts +++ b/packages/code-generator/src/plugins/component/rax/containerMethods.ts @@ -1,4 +1,4 @@ -import { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator'; +import { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator'; import { BuilderComponentPlugin, diff --git a/packages/code-generator/src/plugins/project/framework/icejs/plugins/entryHtml.ts b/packages/code-generator/src/plugins/project/framework/icejs/plugins/entryHtml.ts index aceb7c645..e5837a8dd 100644 --- a/packages/code-generator/src/plugins/project/framework/icejs/plugins/entryHtml.ts +++ b/packages/code-generator/src/plugins/project/framework/icejs/plugins/entryHtml.ts @@ -28,7 +28,7 @@ const pluginFactory: BuilderComponentPluginFactory = () => { - ${ir.meta.name} + ${ir?.meta?.name || 'Ice App'}
diff --git a/packages/code-generator/src/plugins/project/framework/rax/plugins/entryDocument.ts b/packages/code-generator/src/plugins/project/framework/rax/plugins/entryDocument.ts index ba8488c00..cb5240139 100644 --- a/packages/code-generator/src/plugins/project/framework/rax/plugins/entryDocument.ts +++ b/packages/code-generator/src/plugins/project/framework/rax/plugins/entryDocument.ts @@ -34,7 +34,7 @@ function Document() { name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover" /> - ${ir.meta.name} + ${ir?.meta?.name || 'Rax App'}