From abe8a36b516df0f0838550e2174754d3f58b35e5 Mon Sep 17 00:00:00 2001 From: chilingling Date: Tue, 7 Jan 2025 03:56:42 -0800 Subject: [PATCH] fix: genCode favicon can't work on node runtime --- .../src/templates/vue-template/index.js | 33 +++++++++-------- .../expected/appdemo01/public/favicon.ico | Bin 0 -> 12996 bytes .../testcases/generator/generateApp.test.js | 35 ++++++++++++++---- 3 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 packages/vue-generator/test/testcases/generator/expected/appdemo01/public/favicon.ico diff --git a/packages/vue-generator/src/templates/vue-template/index.js b/packages/vue-generator/src/templates/vue-template/index.js index 3c9c229e6..90577077d 100644 --- a/packages/vue-generator/src/templates/vue-template/index.js +++ b/packages/vue-generator/src/templates/vue-template/index.js @@ -33,6 +33,8 @@ const getTemplate = (schema, str) => { }) } +const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined' + /** * 图片的 base64 转 Blob 对象,用于生成本地图片 * @param {*} base64 String @@ -54,7 +56,11 @@ const base64ToBlob = (base64Data) => { let raw try { - raw = window.atob(arr[1]) + if (isBrowser) { + raw = window.atob(arr[1]) + } else { + raw = Buffer.from(arr[1], 'base64').toString('binary') + } } catch (e) { throw new Error('Failed to decode base64 string') } @@ -160,21 +166,18 @@ export function generateTemplate(schema) { } ] - // FIXME: vitest 测试的时候得到的并不是 base64data,所以这里需要跳过文件的出码 - if (process.env?.NODE_ENV !== 'test') { - try { - const faviconData = base64ToBlob(logoImage) + try { + const faviconData = base64ToBlob(logoImage) - res.push({ - fileType: 'image/x-icon', - fileName: 'favicon.ico', - path: './public', - fileContent: faviconData - }) - } catch (error) { - // eslint-disable-next-line no-console - console.error('generate favicon.ico error', error) - } + res.push({ + fileType: 'image/x-icon', + fileName: 'favicon.ico', + path: './public', + fileContent: faviconData + }) + } catch (error) { + // eslint-disable-next-line no-console + console.error('generate favicon.ico error', error) } return res diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/public/favicon.ico b/packages/vue-generator/test/testcases/generator/expected/appdemo01/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6271b2d8129adb150b3e8c51956cbe9e1c045c55 GIT binary patch literal 12996 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 O(bG28s?>P$?Ee7CusRa} literal 0 HcmV?d00001 diff --git a/packages/vue-generator/test/testcases/generator/generateApp.test.js b/packages/vue-generator/test/testcases/generator/generateApp.test.js index 8ee64baee..2b4018bc9 100644 --- a/packages/vue-generator/test/testcases/generator/generateApp.test.js +++ b/packages/vue-generator/test/testcases/generator/generateApp.test.js @@ -1,4 +1,4 @@ -import { expect, test, describe } from 'vitest' +import { expect, test, describe, vi } from 'vitest' import path from 'path' import fs from 'fs' import dirCompare from 'dir-compare' @@ -6,6 +6,17 @@ import { generateApp } from '@/generator/generateApp' import { appSchemaDemo01 } from './mockData' import { logDiffResult } from '../../utils/logDiffResult' +// 需要模拟 import 出来的 favicon.ico 文件, base64 格式,因为在 test 运行环境中直接的 import 出来的不是 bast64 字符串,而是路径 +vi.mock('../../../src/templates/vue-template/templateFiles/public/favicon.ico', () => { + const faviconRelativePath = '../../../src/templates/vue-template/templateFiles/public/favicon.ico' + const fileBuffer = fs.readFileSync(path.join(__dirname, faviconRelativePath)) + const str = fileBuffer.toString('base64') + + return { + default: `data:image/x-icon;base64,${str}` + } +}) + describe('generate whole application', () => { test('should not throw error', async () => { const instance = generateApp() @@ -14,14 +25,22 @@ describe('generate whole application', () => { const { genResult } = res // 写入文件 - genResult.forEach(({ fileName, path: filePath, fileContent }) => { + for (const { fileName, path: filePath, fileContent } of genResult) { fs.mkdirSync(path.resolve(__dirname, `./result/appdemo01/${filePath}`), { recursive: true }) - fs.writeFileSync( - path.resolve(__dirname, `./result/appdemo01/${filePath}/${fileName}`), - // 这里需要将换行符替换成 CRLF 格式的 - fileContent.replace(/\r?\n/g, '\r\n') - ) - }) + + if (typeof fileContent === 'string') { + fs.writeFileSync( + path.resolve(__dirname, `./result/appdemo01/${filePath}/${fileName}`), + // 这里需要将换行符替换成 CRLF 格式的 + fileContent.replace(/\r?\n/g, '\r\n') + ) + } else if (fileContent instanceof Blob) { + const arrayBuffer = await fileContent.arrayBuffer() + const buffer = Buffer.from(arrayBuffer) + + fs.writeFileSync(path.resolve(__dirname, `./result/appdemo01/${filePath}/${fileName}`), buffer) + } + } const compareOptions = { compareContent: true,