create-pika-minigame 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +51 -5
- package/package.json +1 -1
- package/templates/react-native.config.js +5 -0
package/bin/cli.js
CHANGED
|
@@ -197,10 +197,16 @@ ${colors.reset}
|
|
|
197
197
|
const templatesDir = path.join(__dirname, '..', 'templates');
|
|
198
198
|
const srcTemplateDir = path.join(templatesDir, 'src');
|
|
199
199
|
const devTemplateDir = path.join(templatesDir, 'dev');
|
|
200
|
+
const scriptsTemplateDir = path.join(templatesDir, 'scripts');
|
|
201
|
+
|
|
202
|
+
// Convert project name to snake_case for Module Federation scope
|
|
203
|
+
const snakeName = projectName.replace(/-/g, '_').toLowerCase();
|
|
200
204
|
|
|
201
205
|
const replacements = {
|
|
202
206
|
PROJECT_NAME: projectName,
|
|
207
|
+
PROJECT_NAME_KEBAB: projectName.toLowerCase(),
|
|
203
208
|
PROJECT_NAME_PASCAL: pascalName,
|
|
209
|
+
PROJECT_NAME_SNAKE: snakeName,
|
|
204
210
|
};
|
|
205
211
|
|
|
206
212
|
// Copy src folder
|
|
@@ -213,11 +219,32 @@ ${colors.reset}
|
|
|
213
219
|
copyDir(devTemplateDir, path.join(targetDir, 'dev'), replacements);
|
|
214
220
|
}
|
|
215
221
|
|
|
222
|
+
// Copy scripts folder
|
|
223
|
+
if (fs.existsSync(scriptsTemplateDir)) {
|
|
224
|
+
copyDir(scriptsTemplateDir, path.join(targetDir, 'scripts'), replacements);
|
|
225
|
+
// Make deploy script executable
|
|
226
|
+
const deployScript = path.join(targetDir, 'scripts', 'deploy-vercel.sh');
|
|
227
|
+
if (fs.existsSync(deployScript)) {
|
|
228
|
+
fs.chmodSync(deployScript, '755');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Copy Re.Pack config files
|
|
233
|
+
const repackConfigFiles = ['react-native.config.js', 'rspack.config.mjs'];
|
|
234
|
+
for (const configFile of repackConfigFiles) {
|
|
235
|
+
const src = path.join(templatesDir, configFile);
|
|
236
|
+
if (fs.existsSync(src)) {
|
|
237
|
+
const content = fs.readFileSync(src, 'utf8');
|
|
238
|
+
const processed = processTemplate(content, replacements);
|
|
239
|
+
fs.writeFileSync(path.join(targetDir, configFile), processed);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
216
243
|
// Step 3: Patch Podfile for fmt compatibility
|
|
217
244
|
log.step(3, 'Patching for Xcode compatibility...');
|
|
218
245
|
patchPodfile(targetDir);
|
|
219
246
|
|
|
220
|
-
// Step 4: Update package.json with additional dependencies
|
|
247
|
+
// Step 4: Update package.json with additional dependencies and scripts
|
|
221
248
|
log.step(4, 'Updating package.json...');
|
|
222
249
|
|
|
223
250
|
const pkgPath = path.join(targetDir, 'package.json');
|
|
@@ -230,7 +257,23 @@ ${colors.reset}
|
|
|
230
257
|
'react-native-safe-area-context': '4.12.0',
|
|
231
258
|
};
|
|
232
259
|
|
|
233
|
-
|
|
260
|
+
pkg.devDependencies = {
|
|
261
|
+
...pkg.devDependencies,
|
|
262
|
+
'@callstack/repack': '^5.0.0',
|
|
263
|
+
'serve': '^14.2.0',
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
// Add build and deploy scripts
|
|
267
|
+
pkg.scripts = {
|
|
268
|
+
...pkg.scripts,
|
|
269
|
+
'build:ios': `npx react-native webpack-bundle --platform ios --entry-file index.js --dev false --bundle-output build/outputs/ios/remotes/${snakeName}.container.js.bundle`,
|
|
270
|
+
'build:android': `npx react-native webpack-bundle --platform android --entry-file index.js --dev false --bundle-output build/outputs/android/remotes/${snakeName}.container.js.bundle`,
|
|
271
|
+
'build:all': 'npm run build:ios && npm run build:android',
|
|
272
|
+
'serve:ios': 'npx serve build/outputs/ios/remotes -l 9000 --cors',
|
|
273
|
+
'serve:android': 'npx serve build/outputs/android/remotes -l 9000 --cors',
|
|
274
|
+
'deploy': './scripts/deploy-vercel.sh',
|
|
275
|
+
'deploy:prod': './scripts/deploy-vercel.sh --prod',
|
|
276
|
+
};
|
|
234
277
|
|
|
235
278
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
|
|
236
279
|
|
|
@@ -248,14 +291,17 @@ ${colors.bright}Next steps:${colors.reset}
|
|
|
248
291
|
|
|
249
292
|
${colors.bright}Available commands:${colors.reset}
|
|
250
293
|
|
|
251
|
-
${colors.cyan}npm run ios${colors.reset}
|
|
252
|
-
${colors.cyan}npm run android${colors.reset}
|
|
253
|
-
${colors.cyan}npm start${colors.reset}
|
|
294
|
+
${colors.cyan}npm run ios${colors.reset} Run on iOS simulator
|
|
295
|
+
${colors.cyan}npm run android${colors.reset} Run on Android emulator
|
|
296
|
+
${colors.cyan}npm start${colors.reset} Start Metro bundler
|
|
297
|
+
${colors.cyan}npm run deploy${colors.reset} Deploy to Vercel (preview)
|
|
298
|
+
${colors.cyan}npm run deploy:prod${colors.reset} Deploy to Vercel (production)
|
|
254
299
|
|
|
255
300
|
${colors.bright}Project structure:${colors.reset}
|
|
256
301
|
|
|
257
302
|
src/ Game source code (edit this!)
|
|
258
303
|
dev/ Development helpers (MockHost)
|
|
304
|
+
scripts/ Deploy scripts
|
|
259
305
|
|
|
260
306
|
Happy coding! ${colors.yellow}🎮${colors.reset}
|
|
261
307
|
`);
|
package/package.json
CHANGED