kit: add skia initialization

copy canvaskit.wasm to web build dir
This commit is contained in:
DH
2025-12-28 21:31:58 +03:00
parent 3ba467fced
commit 980c391998
2 changed files with 45 additions and 9 deletions

View File

@@ -15,8 +15,8 @@
"build:web:server": "node ./build.mjs",
"build:web:ui": "expo export --platform web --dev --output-dir electron/build/ui --no-minify --source-maps",
"build:web:ui:release": "expo export --platform web --dev --output-dir electron/build/ui",
"build:web": "npm run build:kit && npm run build:web:server && npm run build:web:ui && npm run build:extensions && npm run install:extensions",
"build:web:release": "npm run build:kit && npm run build:web:server && npm run build:web:ui:release && npm run build:extensions && npm run install:extensions",
"build:web": "npm run build:kit && npm run build:web:server && npm run build:web:ui && cp node_modules/canvaskit-wasm/bin/full/canvaskit.wasm electron/build/ui/ && npm run build:extensions && npm run install:extensions",
"build:web:release": "npm run build:kit && npm run build:web:server && npm run build:web:ui:release && cp node_modules/canvaskit-wasm/bin/full/canvaskit.wasm electron/build/ui/ && npm run build:extensions && npm run install:extensions",
"build:android": "npm run build:kit && expo prebuild --platform android && ./android/gradlew assembleDebug -p ./android",
"build:android:release": "npm run build:kit && expo prebuild --platform android && ./android/gradlew assembleRelease -p ./android",
"build:all": "npm run build && npm run build:web && npm run build:android",

View File

@@ -2242,22 +2242,58 @@ export async function startup() {
`;
}
const viewListFile = await fileDb.createFile(path.join(genDir, "view-list.ts"), viewsListFile);
if (viewListFile) {
viewListFile.content = `${generatedHeader}
${Object.keys(views).map(x => `import { ${x} } from '${pathWithoutExt(views[x])}'`).join(';\n')};
export const builtinViews: Record<string, (...props: any[]) => React.JSX.Element> = {
${Object.keys(views).map(x => ` "${x}": ${x}`).join(',\n')}
};
`;
}
const viewsWebFile = await fileDb.createFile(path.join(genDir, "views.web.ts"), viewsListFile);
if (viewsWebFile) {
viewsWebFile.content = `${generatedHeader}
import { LoadSkiaWeb } from '@shopify/react-native-skia/lib/module/web';
export default async function getViews() {
await LoadSkiaWeb({ locateFile: () => 'app://-/canvaskit.wasm' });
return (await import('./view-list')).builtinViews;
}
`;
}
const viewsFile = await fileDb.createFile(path.join(genDir, "views.ts"), viewsListFile);
if (viewsFile) {
viewsFile.content = `${generatedHeader}
import { builtinViews } from './view-list';
export default async function getViews() {
return builtinViews;
}
`;
}
const indexFile = await fileDb.createFile(path.join(genDir, "index.tsx"), viewsListFile);
if (indexFile) {
indexFile.content = `${generatedHeader}
import { main } from '$core/main';
import { startup } from './startup';
${Object.keys(views).map(x => `import { ${x} } from '${pathWithoutExt(views[x])}'`).join(';\n')};
import getViews from './views';
const serverInitializationPromise = startup();
const builtinViews: Record<string, (...props: any[]) => React.JSX.Element> = {
${Object.keys(views).map(x => ` "${x}": ${x}`).join(',\n')}
};
main(builtinViews, serverInitializationPromise);
getViews().then(builtinViews => {
main(builtinViews, serverInitializationPromise);
});
`;
}