From 7a36eab5e6c8116b6129fdf5614786cc5c789edd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=A5=E5=B8=8C?= Date: Sat, 19 Sep 2020 23:26:15 +0800 Subject: [PATCH] fix: merge problems & deps bugs --- .eslintignore | 1 - packages/code-generator/package.json | 4 +- .../code-generator/src/parser/SchemaParser.ts | 38 ++++++++++++++----- .../src/plugins/common/esmodule.ts | 3 ++ .../src/plugins/component/rax/jsx.ts | 1 + .../framework/icejs/plugins/packageJSON.ts | 1 + packages/code-generator/src/utils/schema.ts | 4 +- .../demo1/expected/demo-project/.eslintrc.js | 4 +- .../demo-project/src/pages/Home/index.jsx | 4 +- .../demo2/expected/demo-project/.eslintrc.js | 4 +- .../demo-project/src/pages/Home/index.jsx | 13 +++++-- .../demo3/expected/demo-project/.eslintrc.js | 4 +- .../demo3/expected/demo-project/package.json | 3 +- .../demo-project/src/pages/Detail/index.jsx | 6 +-- .../demo-project/src/pages/Home/index.jsx | 6 +-- .../demo-project/src/pages/List/index.jsx | 6 +-- .../demo4/expected/demo-project/.eslintrc.js | 4 +- .../demo4/expected/demo-project/package.json | 5 +-- .../demo-project/src/pages/Home/index.jsx | 10 ++--- .../demo5/expected/demo-project/.eslintrc.js | 4 +- .../demo-project/src/pages/Home/index.jsx | 4 +- scripts/setup.sh | 2 +- 22 files changed, 77 insertions(+), 54 deletions(-) diff --git a/.eslintignore b/.eslintignore index 550e141f8..129fb3332 100644 --- a/.eslintignore +++ b/.eslintignore @@ -10,7 +10,6 @@ es lib .* ~* -test-cases # 忽略文件 **/*.min.js diff --git a/packages/code-generator/package.json b/packages/code-generator/package.json index 4b879d7b2..508ce6206 100644 --- a/packages/code-generator/package.json +++ b/packages/code-generator/package.json @@ -12,7 +12,7 @@ ], "scripts": { "start": "ava --watch", - "build": "npm run build:tsc", + "build": "npm run build:bs", "build:bs": "rimraf lib && rimraf es && build-scripts build --skip-demo", "build:tsc": "rimraf lib && tsc", "demo": "node ./demo/demo.js", @@ -21,7 +21,7 @@ }, "dependencies": { "@ali/am-eslint-config": "*", - "@ali/lowcode-types": "^0.8.14", + "@ali/lowcode-types": "^1.0.0", "@ali/my-prettier": "^1.0.0", "@babel/generator": "^7.9.5", "@babel/parser": "^7.9.4", diff --git a/packages/code-generator/src/parser/SchemaParser.ts b/packages/code-generator/src/parser/SchemaParser.ts index d766dff53..85b8da081 100644 --- a/packages/code-generator/src/parser/SchemaParser.ts +++ b/packages/code-generator/src/parser/SchemaParser.ts @@ -34,6 +34,18 @@ const defaultContainer: IContainerInfo = { props: {}, }; +function getRootComponentName(typeName: string, maps: Record): string { + if (maps[typeName]) { + const rec = maps[typeName]; + const peerName = Object.keys(maps).find((depName: string) => { + const depInfo = maps[depName]; + return depName !== typeName && depInfo.package === rec.package && depInfo.version === rec.version; + }); + return peerName || typeName; + } + return typeName; +} + class SchemaParser implements ISchemaParser { validate(schema: ProjectSchema): boolean { if (SUPPORT_SCHEMA_VERSION_LIST.indexOf(schema.version) < 0) { @@ -92,6 +104,7 @@ class SchemaParser implements ISchemaParser { const subRoot = n as ContainerSchema; const container: IContainerInfo = { ...subRoot, + componentName: getRootComponentName(subRoot.componentName, compDeps), containerType: subRoot.componentName, moduleName: changeCase.pascalCase(subRoot.fileName), }; @@ -159,13 +172,12 @@ class SchemaParser implements ISchemaParser { // 分析容器内部组件依赖 containers.forEach((container) => { - if (container.children) { - const depNames = this.getComponentNames(container.children); - container.deps = uniqueArray(depNames, (i: string) => i) - .map((depName) => internalDeps[depName] || compDeps[depName]) - .filter((dep) => !!dep); - // container.deps = Object.keys(compDeps).map((depName) => compDeps[depName]); - } + const depNames = this.getComponentNames(container); + // eslint-disable-next-line no-param-reassign + container.deps = uniqueArray(depNames, (i: string) => i) + .map((depName) => internalDeps[depName] || compDeps[depName]) + .filter(Boolean); + // container.deps = Object.keys(compDeps).map((depName) => compDeps[depName]); }); // 分析路由配置 @@ -210,14 +222,20 @@ class SchemaParser implements ISchemaParser { }) .filter((dep) => dep !== null); const npmInfos: INpmPackage[] = p - .filter((i) => Boolean(i)) + .filter(Boolean) .map((i) => ({ package: (i as IExternalDependency).package, version: (i as IExternalDependency).version, })); npms.push(...npmInfos); }); - npms = uniqueArray(npms, (i) => i.package); + + npms.push(...(utilsDeps.map(utilsDep => ({ + package: utilsDep.package, + version: utilsDep.version, + })))); + + npms = uniqueArray(npms, (i) => i.package).filter(Boolean); return { containers, @@ -238,7 +256,7 @@ class SchemaParser implements ISchemaParser { i18n: schema.i18n, containersDeps, utilsDeps, - packages: npms, + packages: npms || [], }, }; } diff --git a/packages/code-generator/src/plugins/common/esmodule.ts b/packages/code-generator/src/plugins/common/esmodule.ts index ac414a50b..4cd09d587 100644 --- a/packages/code-generator/src/plugins/common/esmodule.ts +++ b/packages/code-generator/src/plugins/common/esmodule.ts @@ -38,6 +38,9 @@ function groupDepsByPack(deps: IDependency[]): Record { if (dep.main && depMainBlackList.indexOf(dep.main) < 0) { depMain = dep.main; } + if (depMain.substring(0, 1) === '/') { + depMain = depMain.substring(1); + } addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep); } }); diff --git a/packages/code-generator/src/plugins/component/rax/jsx.ts b/packages/code-generator/src/plugins/component/rax/jsx.ts index 7d43be070..33d547561 100644 --- a/packages/code-generator/src/plugins/component/rax/jsx.ts +++ b/packages/code-generator/src/plugins/component/rax/jsx.ts @@ -63,6 +63,7 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => }); // 注意:这里其实隐含了一个假设:schema 中的 componentName 应该是一个有效的 JS 标识符,而且是大写字母打头的 + // FIXME: 为了快速修复临时加的逻辑,需要用 pre-process 的方式替代处理。 const mapComponentNameToAliasOrKeepIt = (componentName: string) => componentsNameAliasMap.get(componentName) || componentName; // 然后过滤掉所有的别名 chunks diff --git a/packages/code-generator/src/plugins/project/framework/icejs/plugins/packageJSON.ts b/packages/code-generator/src/plugins/project/framework/icejs/plugins/packageJSON.ts index c3eb5198d..ee125dfa0 100644 --- a/packages/code-generator/src/plugins/project/framework/icejs/plugins/packageJSON.ts +++ b/packages/code-generator/src/plugins/project/framework/icejs/plugins/packageJSON.ts @@ -74,6 +74,7 @@ const pluginFactory: BuilderComponentPluginFactory = () => { originTemplate: '@alifd/scaffold-lite-js', }; + console.log(ir.packages); ir.packages.forEach((packageInfo) => { packageJson.dependencies[packageInfo.package] = packageInfo.version; }); diff --git a/packages/code-generator/src/utils/schema.ts b/packages/code-generator/src/utils/schema.ts index ce19ee21b..642ac49fb 100644 --- a/packages/code-generator/src/utils/schema.ts +++ b/packages/code-generator/src/utils/schema.ts @@ -49,7 +49,9 @@ export function handleSubNodes( let result: T | undefined; const childrenRes: T[] = []; - if (isDOMText(children)) { + if (children === null || children === undefined) { + return []; + } else if (isDOMText(children)) { const handler = handlers.string || noop; result = handler(children as string); } else if (isJSExpression(children)) { diff --git a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/.eslintrc.js b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/.eslintrc.js index e2a7c5b54..f053ebf79 100644 --- a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/.eslintrc.js +++ b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: ['rax'], -}; +module.exports = {}; diff --git a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx index cb5a4ddbe..fbd8ec489 100644 --- a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx @@ -25,7 +25,9 @@ class Home$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/.eslintrc.js b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/.eslintrc.js index e2a7c5b54..f053ebf79 100644 --- a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/.eslintrc.js +++ b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: ['rax'], -}; +module.exports = {}; diff --git a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx index 5b78b28a0..94f5a6882 100644 --- a/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo2/expected/demo-project/src/pages/Home/index.jsx @@ -28,7 +28,11 @@ import './index.css'; class Home$$Page extends Component { state = { clickCount: 0, - user: { name: '张三', age: 18, avatar: 'https://gw.alicdn.com/tfs/TB1Ui9BMkY2gK0jSZFgXXc5OFXa-50-50.png' }, + user: { + name: '张三', + age: 18, + avatar: 'https://gw.alicdn.com/tfs/TB1Ui9BMkY2gK0jSZFgXXc5OFXa-50-50.png', + }, orders: [ { title: '【小米智能生活】米家扫地机器人家用全自动扫拖一体机拖地吸尘器', @@ -108,7 +112,7 @@ class Home$$Page extends Component { === Orders: === - {__$$evalArray(() => __$$context.state.orders).map((order, index) => ( + {__$$evalArray(() => __$$eval(() => __$$context.state.orders)).map((order, index) => ( - order.coverUrl) }} style={{ width: '80px', height: '60px' }} /> + order.coverUrl) }} + style={{ width: '80px', height: '60px' }} + /> {__$$eval(() => order.title)} diff --git a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/.eslintrc.js b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/.eslintrc.js index e2a7c5b54..f053ebf79 100644 --- a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/.eslintrc.js +++ b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: ['rax'], -}; +module.exports = {}; diff --git a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/package.json b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/package.json index f9451df10..c01702a9e 100644 --- a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/package.json +++ b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/package.json @@ -20,8 +20,7 @@ "rax-document": "^0.1.0", "rax-view": "^1.0.0", "rax-text": "^1.0.0", - "rax-link": "^1.0.0", - "rax-image": "^1.0.0" + "rax-link": "^1.0.0" }, "devDependencies": { "build-plugin-rax-app": "^5.0.0", diff --git a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Detail/index.jsx b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Detail/index.jsx index 91dbd2d75..b553783f3 100644 --- a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Detail/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Detail/index.jsx @@ -9,8 +9,6 @@ import Text from 'rax-text'; import Link from 'rax-link'; -import Image from 'rax-image'; - import { create as __$$createDataSourceEngine } from '@ali/lowcode-datasource-engine/runtime'; import { isMiniApp as __$$isMiniApp } from 'universal-env'; @@ -31,7 +29,9 @@ class Detail$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Home/index.jsx index d1d93e306..50ad699d5 100644 --- a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/Home/index.jsx @@ -9,8 +9,6 @@ import Text from 'rax-text'; import Link from 'rax-link'; -import Image from 'rax-image'; - import { create as __$$createDataSourceEngine } from '@ali/lowcode-datasource-engine/runtime'; import { isMiniApp as __$$isMiniApp } from 'universal-env'; @@ -31,7 +29,9 @@ class Home$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/List/index.jsx b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/List/index.jsx index 9c14cc6e5..0441490ee 100644 --- a/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/List/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo3/expected/demo-project/src/pages/List/index.jsx @@ -9,8 +9,6 @@ import Text from 'rax-text'; import Link from 'rax-link'; -import Image from 'rax-image'; - import { create as __$$createDataSourceEngine } from '@ali/lowcode-datasource-engine/runtime'; import { isMiniApp as __$$isMiniApp } from 'universal-env'; @@ -31,7 +29,9 @@ class List$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/.eslintrc.js b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/.eslintrc.js index e2a7c5b54..f053ebf79 100644 --- a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/.eslintrc.js +++ b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: ['rax'], -}; +module.exports = {}; diff --git a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/package.json b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/package.json index c7a658230..182caba9a 100644 --- a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/package.json +++ b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/package.json @@ -18,10 +18,9 @@ "rax": "^1.1.0", "rax-app": "^2.0.0", "rax-document": "^0.1.0", - "@alife/right-design-card": "*", "rax-view": "^1.0.0", - "rax-text": "^1.0.0", - "rax-image": "^1.0.0" + "@alife/right-design-card": "*", + "rax-text": "^1.0.0" }, "devDependencies": { "build-plugin-rax-app": "^5.0.0", diff --git a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/src/pages/Home/index.jsx index 6b550a1e3..2dcaab3e8 100644 --- a/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo4/expected/demo-project/src/pages/Home/index.jsx @@ -3,13 +3,11 @@ import { createElement, Component } from 'rax'; import { withRouter as __$$withRouter } from 'rax-app'; -import Card from '@alife/right-design-card'; - import View from 'rax-view'; -import Text from 'rax-text'; +import Card from '@alife/right-design-card'; -import Image from 'rax-image'; +import Text from 'rax-text'; import { create as __$$createDataSourceEngine } from '@ali/lowcode-datasource-engine/runtime'; @@ -31,7 +29,9 @@ class Home$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/.eslintrc.js b/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/.eslintrc.js index e2a7c5b54..f053ebf79 100644 --- a/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/.eslintrc.js +++ b/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/.eslintrc.js @@ -1,3 +1 @@ -module.exports = { - extends: ['rax'], -}; +module.exports = {}; diff --git a/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/src/pages/Home/index.jsx index d7885feb3..fbbe04789 100644 --- a/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo5/expected/demo-project/src/pages/Home/index.jsx @@ -25,7 +25,9 @@ class Home$$Page extends Component { _context = this._createContext(); _dataSourceConfig = this._defineDataSourceConfig(); - _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { runtimeConfig: true }); + _dataSourceEngine = __$$createDataSourceEngine(this._dataSourceConfig, this._context, { + runtimeConfig: true, + }); _utils = this._defineUtils(); diff --git a/scripts/setup.sh b/scripts/setup.sh index ee864f795..7aced60d2 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -tnpm i -g lerna @ali/tyarn tsc +tnpm i -g lerna @ali/tyarn rm -rf node_modules package-lock.json yarn.lock lerna clean -y