From d4660361d8c92716ffe451467e739b59201f7a01 Mon Sep 17 00:00:00 2001 From: Innei Date: Fri, 16 Aug 2024 16:31:16 +0800 Subject: [PATCH] fix: create module json first Signed-off-by: Innei --- apps/core/src/global/index.global.ts | 18 ++++++++++++------ apps/core/src/main.ts | 4 ++-- .../src/migration/helper/encrypt-configs.ts | 4 ++-- .../processors/helper/helper.image.service.ts | 15 ++++++++------- apps/core/src/repl.ts | 4 ++-- apps/core/src/utils/tool.util.ts | 7 +++++-- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/apps/core/src/global/index.global.ts b/apps/core/src/global/index.global.ts index 5ffe6beb..d3413786 100644 --- a/apps/core/src/global/index.global.ts +++ b/apps/core/src/global/index.global.ts @@ -1,5 +1,5 @@ import cluster from 'node:cluster' -import { mkdirSync } from 'node:fs' +import { mkdirSync, writeFileSync } from 'node:fs' import { Logger } from '@nestjs/common' @@ -21,7 +21,7 @@ import './dayjs.global' import '@mx-space/external/zx-global' // 建立目录 -function mkdirs() { +function createAppFolders() { if (!CLUSTER.enable || cluster.isPrimary) { mkdirSync(DATA_DIR, { recursive: true }) Logger.log(chalk.blue(`数据目录已经建好:${DATA_DIR}`)) @@ -35,8 +35,14 @@ function mkdirs() { Logger.log(chalk.blue(`文件存放目录已经建好:${STATIC_FILE_DIR}`)) mkdirSync(STATIC_FILE_TRASH_DIR, { recursive: true }) Logger.log(chalk.blue(`文件回收站目录已经建好:${STATIC_FILE_TRASH_DIR}`)) - // mkdirSync(THEME_DIR, { recursive: true }) - // Logger.log(chalk.blue(`主题目录已经建好:${THEME_DIR}`)) + + const packageJSON = `${DATA_DIR}/package.json` + const hasPKG = fs.existsSync(packageJSON) + if (!hasPKG) { + writeFileSync(packageJSON, '{"name":"modules"}', { + flag: 'a', + }) + } } } @@ -60,9 +66,9 @@ function nodeEnvInjection() { process.env.CBOR_NATIVE_ACCELERATION_DISABLED = 'true' } -export function register() { +export function initializeApp() { registerGlobal() nodeEnvInjection() registerJSONGlobal() - mkdirs() + createAppFolders() } diff --git a/apps/core/src/main.ts b/apps/core/src/main.ts index 1fd17d9c..7fe1509e 100644 --- a/apps/core/src/main.ts +++ b/apps/core/src/main.ts @@ -6,7 +6,7 @@ import { DEBUG_MODE } from './app.config' import { registerForMemoryDump } from './dump' import { logger } from './global/consola.global' import { isMainCluster, isMainProcess } from './global/env.global' -import { register } from './global/index.global' +import { initializeApp } from './global/index.global' import { migrateDatabase } from './migration/migrate' process.title = `Mix Space (${cluster.isPrimary ? 'master' : 'worker'}) - ${ @@ -14,7 +14,7 @@ process.title = `Mix Space (${cluster.isPrimary ? 'master' : 'worker'}) - ${ }` async function main() { - register() + initializeApp() if (isMainProcess) { await migrateDatabase() diff --git a/apps/core/src/migration/helper/encrypt-configs.ts b/apps/core/src/migration/helper/encrypt-configs.ts index 3bb68e1b..e8409250 100644 --- a/apps/core/src/migration/helper/encrypt-configs.ts +++ b/apps/core/src/migration/helper/encrypt-configs.ts @@ -2,7 +2,7 @@ import { plainToInstance } from 'class-transformer' import type { IConfigKeys } from '~/modules/configs/configs.interface' import { ENCRYPT } from '~/app.config' -import { register } from '~/global/index.global' +import { initializeApp } from '~/global/index.global' import { generateDefaultConfig } from '~/modules/configs/configs.default' import * as optionDtos from '~/modules/configs/configs.dto' import { encryptObject } from '~/modules/configs/configs.encrypt.util' @@ -25,7 +25,7 @@ Object.entries(optionDtos).reduce((obj, [key, value]) => { }, {}) async function main() { - await register() + await initializeApp() const connection = await getDatabaseConnection() const db = connection.db! const configs: any[] = [] diff --git a/apps/core/src/processors/helper/helper.image.service.ts b/apps/core/src/processors/helper/helper.image.service.ts index 7fec169a..5c46a657 100644 --- a/apps/core/src/processors/helper/helper.image.service.ts +++ b/apps/core/src/processors/helper/helper.image.service.ts @@ -2,7 +2,7 @@ import { encode } from 'blurhash' import type { ImageModel } from '~/shared/model/image.model' import type { Sharp } from 'sharp' -import { Injectable, Logger } from '@nestjs/common' +import { Injectable, Logger, OnModuleInit } from '@nestjs/common' import { ConfigsService } from '~/modules/configs/configs.service' import { pickImagesFromMarkdown } from '~/utils/pic.util' @@ -11,19 +11,20 @@ import { requireDepsWithInstall } from '~/utils/tool.util' import { HttpService } from './helper.http.service' @Injectable() -export class ImageService { +export class ImageService implements OnModuleInit { private logger: Logger constructor( private readonly httpService: HttpService, private readonly configsService: ConfigsService, ) { this.logger = new Logger(ImageService.name) + } - if (!isDev) { - requireDepsWithInstall('sharp').catch((error: any) => { - this.logger.error(`sharp install failed: ${error.message}`) - }) - } + onModuleInit() { + requireDepsWithInstall('sharp').catch((error: any) => { + this.logger.error(`sharp install failed: ${error.message}`) + console.error(error) + }) } async saveImageDimensionsFromMarkdownText( diff --git a/apps/core/src/repl.ts b/apps/core/src/repl.ts index bb4b53e8..3b0aade7 100644 --- a/apps/core/src/repl.ts +++ b/apps/core/src/repl.ts @@ -1,9 +1,9 @@ import { repl } from '@nestjs/core' -import { register } from './global/index.global' +import { initializeApp } from './global/index.global' async function bootstrap() { - register() + initializeApp() const { AppModule } = await import('./app.module') await repl(AppModule) } diff --git a/apps/core/src/utils/tool.util.ts b/apps/core/src/utils/tool.util.ts index 32170f2d..cee0a959 100644 --- a/apps/core/src/utils/tool.util.ts +++ b/apps/core/src/utils/tool.util.ts @@ -1,9 +1,11 @@ import { createHash } from 'node:crypto' +import { createRequire } from 'node:module' import { join } from 'node:path' import { cloneDeep } from 'lodash' import { installPackage } from '@antfu/install-pkg' +import { NODE_REQUIRE_PATH } from '~/constants/path.constant' import { logger } from '~/global/consola.global' export const md5 = (text: string) => @@ -156,11 +158,12 @@ export function escapeXml(unsafe: string) { export const requireDepsWithInstall = async (deps: string) => { try { + const require = createRequire(NODE_REQUIRE_PATH) return require(require.resolve(deps)) } catch { logger.info(`Installing ${deps}...`) - await installPackage(deps, { silent: false }) - + await installPackage(deps, { silent: false, cwd: NODE_REQUIRE_PATH }) + const require = createRequire(NODE_REQUIRE_PATH) return require(deps) } }