UNPKG

utquidem

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

113 lines (96 loc) 3.92 kB
import path from 'path'; import { getPackageVersion } from '@modern-js/generator-utils'; import { GeneratorContext, GeneratorCore } from '@modern-js/codesmith'; import { AppAPI } from '@modern-js/codesmith-api-app'; import { JsonAPI } from '@modern-js/codesmith-api-json'; import { i18n, DeployTypeSchema, BooleanConfig, CDNType, LambdaType, } from '@modern-js/generator-common'; const docLinks: Record<string, string> = { oss: 'https://modernjs.dev/docs/guides/features/server-side/deploy/upload-cdn/oss', cos: 'https://modernjs.dev/docs/guides/features/server-side/deploy/upload-cdn/cos', fc: 'https://modernjs.dev/docs/guides/features/server-side/deploy/modern-server/use-lambda/aliyun-fc', scf: 'https://modernjs.dev/docs/guides/features/server-side/deploy/modern-server/use-lambda/tencent-scf', host: 'https://modernjs.dev/docs/guides/features/server-side/deploy/static-hosting', docker: 'https://modernjs.dev/docs/guides/features/server-side/deploy/modern-server/any-container/docker', webServer: 'https://modernjs.dev/docs/guides/features/server-side/deploy/modern-server/web-server', }; const handleTemplateFile = async ( context: GeneratorContext, generator: GeneratorCore, appApi: AppAPI, ) => { const jsonAPI = new JsonAPI(generator); const ans = await appApi.getInputBySchema(DeployTypeSchema, context.config); const appDir = context.materials.default.basePath; const { disableModernServer, cdnType, lambdaType } = ans as Record< string, string >; const updateInfo: Record<string, string> = { 'scripts.deploy': 'modern deploy', }; const addDep = async (dep: string) => { const version = await getPackageVersion(dep); updateInfo[`devDependencies.${dep}`] = version; }; if (disableModernServer === BooleanConfig.YES) { await addDep('@modern-js/plugin-static-hosting'); generator.logger.info( `未使用 Modern.js 内置的服务器, 你可能希望使用静态 Web 服务器部署应用, 相关内容可以查看官网:\n- ${docLinks.host}\n`, ); } if (cdnType !== CDNType.NO) { await addDep(`@modern-js/plugin-cdn-${cdnType}`); generator.logger.info( `使用 ${cdnType} 平台上传资源文件, 相关内容可以查看官网:\n- ${docLinks[cdnType]}\n`, ); } else { generator.logger.info( `未选择 CDN 上传平台, 你可能希望直接使用内置的 Web Server 托管静态资源, 相关内容可以查看官网:\n- ${docLinks.webServer}\n`, ); } if (lambdaType && lambdaType !== LambdaType.NO) { await addDep(`@modern-js/plugin-lambda-${lambdaType}`); generator.logger.info( `使用 ${lambdaType} 部署应用, 相关内容可以查看官网:\n- ${docLinks[lambdaType]}\n`, ); } else { generator.logger.info( `未选择云函数部署应用, 你可能希望使用其他容器部署应用, 相关内容可以查看官网: \n- ${docLinks.docker}\n`, ); } await jsonAPI.update( context.materials.default.get(path.join(appDir, 'package.json')), { query: {}, update: { $set: { ...updateInfo, }, }, }, ); }; export default async (context: GeneratorContext, generator: GeneratorCore) => { const appApi = new AppAPI(context, generator); const { locale } = context.config; i18n.changeLanguage({ locale }); appApi.i18n.changeLanguage({ locale }); if (!(await appApi.checkEnvironment())) { // eslint-disable-next-line no-process-exit process.exit(1); } generator.logger.debug(`start run @modern-js/cloud-deploy-generator`); generator.logger.debug(`context=${JSON.stringify(context)}`); generator.logger.debug(`context.data=${JSON.stringify(context.data)}`); await handleTemplateFile(context, generator, appApi); await appApi.runInstall(); generator.logger.debug(`forge @modern-js/cloud-deploy-generator succeed `); };