alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.66k stars 2.55k forks source link

服务端出码,直接报solutions 未定义 #693

Closed azzg closed 1 year ago

azzg commented 2 years ago

Describe the bug (required) / 详细描述 bug(必填)

使用官网示例代码进行服务器端出码,运行时,直接报solutions 未定义,官方代码如下: image

本地代码如下: image

image

Clarence-pan commented 2 years ago

image

node v16.x 对于 default 导出的处理有点奇怪,如上图
也可能是 esbuild 对于 default 导出处理得有些bug

azzg commented 2 years ago

哪个版本的node可以正常调用服务器端出码的代码呢

Clarence-pan commented 2 years ago

@azzg 可以尝试别用 "type": "module" 这种模式,使用传统的 require 的方式应该是好的(可以考虑使用 babel 来将 import 转换为 require)

azzg commented 2 years ago

node 版本换成14.17.0 也是这样,另外去掉 "type": "module"后,使用require的方式,也是有同样的问题 image

Tomatoro commented 2 years ago

同样有这样的问题 , node版本 v14.15.0 , 采用require的方式引入的, 报同样的错.
另外看到readme里面有关于出码这块的专门的群, 请问怎么可以进呢?

github-actions[bot] commented 2 years ago

This issue is stale because it has been open 10 days with no activity. Remove stale label or comment or this will be closed in 2 days.

sundi78634 commented 2 years ago

@alilc/lowcode-code-generator@1.0.6 遇到了同样的问题,有解决办法吗

Clarence-pan commented 2 years ago

使用require方式引入应该不会报错的

sundi78634 commented 2 years ago

@Clarence-pan 能否提供一份环境信息?Node版本14.19.0,使用require引入一样的报错。

sundi78634 commented 2 years ago

看了下源码,solutions是默认导出,引入后从default下取值就可以了。 使用ESM和CommonJS都可以

tony574273719 commented 1 year ago

const CodeGenerator = require('@alilc/lowcode-code-generator');

const lowcodeGenerate = async (schema) => { const projectBuilder = CodeGenerator.default.solutions.icejs(); const project = await projectBuilder.generateProject( schema, // 编排搭建出来的 schema ); // 写入磁盘 await CodeGenerator.default.publishers.disk().publish({ project, // 上一步生成的 project outputPath: '/path/to/your/output/dir', // 输出目录 projectSlug: 'your-project-slug', // 项目标识 }); }

LeoYuan commented 1 year ago

这个问题本质上是在 CommonJS/CJS 和 ESM 混用时,如何处理 export default 的问题~

在常见的转译器,比如 typescript compiler / webpack,都有相应的机制去抹平处理 CJS / ESM 的差异,比如 ts 是 esModuleInterop,webpack 是默认支持

假如没有用到以上,那就只能自己 require('@alilc/lowcode-code-generator').default 了~