@vue-skuilder/cli 0.1.3 → 0.1.4
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/dist/utils/template.d.ts +10 -0
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +201 -2
- package/dist/utils/template.js.map +1 -1
- package/package.json +2 -2
- package/src/utils/template.ts +208 -2
package/dist/utils/template.d.ts
CHANGED
|
@@ -11,10 +11,20 @@ export declare function copyDirectory(source: string, destination: string, exclu
|
|
|
11
11
|
* Transform package.json to use published dependencies instead of workspace references
|
|
12
12
|
*/
|
|
13
13
|
export declare function transformPackageJson(packageJsonPath: string, projectName: string, cliVersion: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Create a vite.config.ts to work with published packages instead of workspace sources
|
|
16
|
+
*
|
|
17
|
+
* // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createViteConfig(viteConfigPath: string): Promise<void>;
|
|
14
20
|
/**
|
|
15
21
|
* Generate skuilder.config.json based on project configuration
|
|
16
22
|
*/
|
|
17
23
|
export declare function generateSkuilderConfig(configPath: string, config: ProjectConfig): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Generate .gitignore file for the project
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateGitignore(gitignorePath: string): Promise<void>;
|
|
18
28
|
/**
|
|
19
29
|
* Generate project README.md
|
|
20
30
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAK5D;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAa5D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAM,EAAgD,GACtE,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D5E;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsH5E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Df;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
package/dist/utils/template.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
1
|
+
import { promises as fs, existsSync } from 'fs';
|
|
3
2
|
import path from 'path';
|
|
4
3
|
import { fileURLToPath } from 'url';
|
|
5
4
|
import chalk from 'chalk';
|
|
@@ -60,10 +59,81 @@ export async function transformPackageJson(packageJsonPath, projectName, cliVers
|
|
|
60
59
|
}
|
|
61
60
|
}
|
|
62
61
|
}
|
|
62
|
+
// Add missing terser devDependency for build minification
|
|
63
|
+
if (packageJson.devDependencies && !packageJson.devDependencies['terser']) {
|
|
64
|
+
packageJson.devDependencies['terser'] = '^5.39.0';
|
|
65
|
+
}
|
|
63
66
|
// Remove CLI-specific fields that don't belong in generated projects
|
|
64
67
|
delete packageJson.publishConfig;
|
|
65
68
|
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
66
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a vite.config.ts to work with published packages instead of workspace sources
|
|
72
|
+
*
|
|
73
|
+
* // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
|
|
74
|
+
*/
|
|
75
|
+
export async function createViteConfig(viteConfigPath) {
|
|
76
|
+
// Create a clean vite config for standalone projects
|
|
77
|
+
const transformedContent = `// packages/standalone-ui/vite.config.ts
|
|
78
|
+
import { defineConfig } from 'vite';
|
|
79
|
+
import vue from '@vitejs/plugin-vue';
|
|
80
|
+
import { fileURLToPath, URL } from 'node:url';
|
|
81
|
+
|
|
82
|
+
export default defineConfig({
|
|
83
|
+
plugins: [vue()],
|
|
84
|
+
resolve: {
|
|
85
|
+
alias: {
|
|
86
|
+
// Alias for internal src paths
|
|
87
|
+
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
88
|
+
|
|
89
|
+
// Add events alias if needed (often required by dependencies)
|
|
90
|
+
events: 'events',
|
|
91
|
+
},
|
|
92
|
+
extensions: ['.js', '.ts', '.json', '.vue'],
|
|
93
|
+
dedupe: [
|
|
94
|
+
// Ensure single instances of core libs and published packages
|
|
95
|
+
'vue',
|
|
96
|
+
'vuetify',
|
|
97
|
+
'pinia',
|
|
98
|
+
'vue-router',
|
|
99
|
+
'@vue-skuilder/db',
|
|
100
|
+
'@vue-skuilder/common',
|
|
101
|
+
'@vue-skuilder/common-ui',
|
|
102
|
+
'@vue-skuilder/courses',
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
// --- Dependencies optimization ---
|
|
106
|
+
optimizeDeps: {
|
|
107
|
+
// Help Vite pre-bundle dependencies from published packages
|
|
108
|
+
include: [
|
|
109
|
+
'@vue-skuilder/common-ui',
|
|
110
|
+
'@vue-skuilder/db',
|
|
111
|
+
'@vue-skuilder/common',
|
|
112
|
+
'@vue-skuilder/courses',
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
server: {
|
|
116
|
+
port: 5173, // Use standard Vite port for standalone projects
|
|
117
|
+
},
|
|
118
|
+
build: {
|
|
119
|
+
sourcemap: true,
|
|
120
|
+
target: 'es2020',
|
|
121
|
+
minify: 'terser',
|
|
122
|
+
terserOptions: {
|
|
123
|
+
keep_classnames: true,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
// Add define block for process polyfills
|
|
127
|
+
define: {
|
|
128
|
+
global: 'window',
|
|
129
|
+
'process.env': process.env,
|
|
130
|
+
'process.browser': true,
|
|
131
|
+
'process.version': JSON.stringify(process.version),
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
`;
|
|
135
|
+
await fs.writeFile(viteConfigPath, transformedContent);
|
|
136
|
+
}
|
|
67
137
|
/**
|
|
68
138
|
* Generate skuilder.config.json based on project configuration
|
|
69
139
|
*/
|
|
@@ -83,6 +153,127 @@ export async function generateSkuilderConfig(configPath, config) {
|
|
|
83
153
|
}
|
|
84
154
|
await fs.writeFile(configPath, JSON.stringify(skuilderConfig, null, 2));
|
|
85
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Generate .gitignore file for the project
|
|
158
|
+
*/
|
|
159
|
+
export async function generateGitignore(gitignorePath) {
|
|
160
|
+
const gitignoreContent = `# Dependencies
|
|
161
|
+
node_modules/
|
|
162
|
+
/.pnp
|
|
163
|
+
.pnp.js
|
|
164
|
+
|
|
165
|
+
# Production builds
|
|
166
|
+
/dist
|
|
167
|
+
/build
|
|
168
|
+
|
|
169
|
+
# Local env files
|
|
170
|
+
.env
|
|
171
|
+
.env.local
|
|
172
|
+
.env.development.local
|
|
173
|
+
.env.test.local
|
|
174
|
+
.env.production.local
|
|
175
|
+
|
|
176
|
+
# Log files
|
|
177
|
+
npm-debug.log*
|
|
178
|
+
yarn-debug.log*
|
|
179
|
+
yarn-error.log*
|
|
180
|
+
pnpm-debug.log*
|
|
181
|
+
lerna-debug.log*
|
|
182
|
+
|
|
183
|
+
# Runtime data
|
|
184
|
+
pids
|
|
185
|
+
*.pid
|
|
186
|
+
*.seed
|
|
187
|
+
*.pid.lock
|
|
188
|
+
|
|
189
|
+
# Coverage directory used by tools like istanbul
|
|
190
|
+
coverage/
|
|
191
|
+
*.lcov
|
|
192
|
+
|
|
193
|
+
# nyc test coverage
|
|
194
|
+
.nyc_output
|
|
195
|
+
|
|
196
|
+
# Dependency directories
|
|
197
|
+
jspm_packages/
|
|
198
|
+
|
|
199
|
+
# TypeScript cache
|
|
200
|
+
*.tsbuildinfo
|
|
201
|
+
|
|
202
|
+
# Optional npm cache directory
|
|
203
|
+
.npm
|
|
204
|
+
|
|
205
|
+
# Optional eslint cache
|
|
206
|
+
.eslintcache
|
|
207
|
+
|
|
208
|
+
# Microbundle cache
|
|
209
|
+
.rpt2_cache/
|
|
210
|
+
.rts2_cache_cjs/
|
|
211
|
+
.rts2_cache_es/
|
|
212
|
+
.rts2_cache_umd/
|
|
213
|
+
|
|
214
|
+
# Optional REPL history
|
|
215
|
+
.node_repl_history
|
|
216
|
+
|
|
217
|
+
# Output of 'npm pack'
|
|
218
|
+
*.tgz
|
|
219
|
+
|
|
220
|
+
# Yarn Integrity file
|
|
221
|
+
.yarn-integrity
|
|
222
|
+
|
|
223
|
+
# parcel-bundler cache (https://parceljs.org/)
|
|
224
|
+
.cache
|
|
225
|
+
.parcel-cache
|
|
226
|
+
|
|
227
|
+
# Next.js build output
|
|
228
|
+
.next
|
|
229
|
+
|
|
230
|
+
# Nuxt.js build / generate output
|
|
231
|
+
.nuxt
|
|
232
|
+
dist
|
|
233
|
+
|
|
234
|
+
# Gatsby files
|
|
235
|
+
.cache/
|
|
236
|
+
public
|
|
237
|
+
|
|
238
|
+
# Storybook build outputs
|
|
239
|
+
.out
|
|
240
|
+
.storybook-out
|
|
241
|
+
|
|
242
|
+
# Temporary folders
|
|
243
|
+
tmp/
|
|
244
|
+
temp/
|
|
245
|
+
|
|
246
|
+
# Editor directories and files
|
|
247
|
+
.vscode/
|
|
248
|
+
.idea
|
|
249
|
+
.DS_Store
|
|
250
|
+
*.suo
|
|
251
|
+
*.ntvs*
|
|
252
|
+
*.njsproj
|
|
253
|
+
*.sln
|
|
254
|
+
*.sw?
|
|
255
|
+
|
|
256
|
+
# OS generated files
|
|
257
|
+
Thumbs.db
|
|
258
|
+
|
|
259
|
+
# Cypress
|
|
260
|
+
/cypress/videos/
|
|
261
|
+
/cypress/screenshots/
|
|
262
|
+
|
|
263
|
+
# Local development
|
|
264
|
+
.env.development
|
|
265
|
+
.env.production
|
|
266
|
+
|
|
267
|
+
# Package manager lockfiles (uncomment if you want to ignore them)
|
|
268
|
+
# package-lock.json
|
|
269
|
+
# yarn.lock
|
|
270
|
+
# pnpm-lock.yaml
|
|
271
|
+
|
|
272
|
+
# Skuilder specific
|
|
273
|
+
/src/data/local-*.json
|
|
274
|
+
`;
|
|
275
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
276
|
+
}
|
|
86
277
|
/**
|
|
87
278
|
* Generate project README.md
|
|
88
279
|
*/
|
|
@@ -159,12 +350,20 @@ export async function processTemplate(projectPath, config, cliVersion) {
|
|
|
159
350
|
console.log(chalk.blue('⚙️ Configuring package.json...'));
|
|
160
351
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
161
352
|
await transformPackageJson(packageJsonPath, config.projectName, cliVersion);
|
|
353
|
+
console.log(chalk.blue('🔧 Creating vite.config.ts...'));
|
|
354
|
+
const viteConfigPath = path.join(projectPath, 'vite.config.ts');
|
|
355
|
+
if (existsSync(viteConfigPath)) {
|
|
356
|
+
await createViteConfig(viteConfigPath);
|
|
357
|
+
}
|
|
162
358
|
console.log(chalk.blue('🔧 Generating configuration...'));
|
|
163
359
|
const configPath = path.join(projectPath, 'skuilder.config.json');
|
|
164
360
|
await generateSkuilderConfig(configPath, config);
|
|
165
361
|
console.log(chalk.blue('📝 Creating README...'));
|
|
166
362
|
const readmePath = path.join(projectPath, 'README.md');
|
|
167
363
|
await generateReadme(readmePath, config);
|
|
364
|
+
console.log(chalk.blue('📄 Generating .gitignore...'));
|
|
365
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
366
|
+
await generateGitignore(gitignorePath);
|
|
168
367
|
console.log(chalk.green('✅ Template processing complete!'));
|
|
169
368
|
}
|
|
170
369
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.4",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"description": "CLI scaffolding tool for vue-skuilder projects",
|
|
9
9
|
"bin": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"course"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vue-skuilder/standalone-ui": "^0.1.
|
|
36
|
+
"@vue-skuilder/standalone-ui": "^0.1.4",
|
|
37
37
|
"chalk": "^5.3.0",
|
|
38
38
|
"commander": "^11.0.0",
|
|
39
39
|
"fs-extra": "^11.2.0",
|
package/src/utils/template.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
1
|
+
import { promises as fs, existsSync } from 'fs';
|
|
3
2
|
import path from 'path';
|
|
4
3
|
import { fileURLToPath } from 'url';
|
|
5
4
|
import chalk from 'chalk';
|
|
@@ -81,12 +80,86 @@ export async function transformPackageJson(
|
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
|
|
83
|
+
// Add missing terser devDependency for build minification
|
|
84
|
+
if (packageJson.devDependencies && !packageJson.devDependencies['terser']) {
|
|
85
|
+
packageJson.devDependencies['terser'] = '^5.39.0';
|
|
86
|
+
}
|
|
87
|
+
|
|
84
88
|
// Remove CLI-specific fields that don't belong in generated projects
|
|
85
89
|
delete packageJson.publishConfig;
|
|
86
90
|
|
|
87
91
|
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
88
92
|
}
|
|
89
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Create a vite.config.ts to work with published packages instead of workspace sources
|
|
96
|
+
*
|
|
97
|
+
* // [ ] This should be revised so that it works from the existing vite.config.ts in standalone-ui. As is, it recreates 95% of the same config.
|
|
98
|
+
*/
|
|
99
|
+
export async function createViteConfig(viteConfigPath: string): Promise<void> {
|
|
100
|
+
// Create a clean vite config for standalone projects
|
|
101
|
+
const transformedContent = `// packages/standalone-ui/vite.config.ts
|
|
102
|
+
import { defineConfig } from 'vite';
|
|
103
|
+
import vue from '@vitejs/plugin-vue';
|
|
104
|
+
import { fileURLToPath, URL } from 'node:url';
|
|
105
|
+
|
|
106
|
+
export default defineConfig({
|
|
107
|
+
plugins: [vue()],
|
|
108
|
+
resolve: {
|
|
109
|
+
alias: {
|
|
110
|
+
// Alias for internal src paths
|
|
111
|
+
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
112
|
+
|
|
113
|
+
// Add events alias if needed (often required by dependencies)
|
|
114
|
+
events: 'events',
|
|
115
|
+
},
|
|
116
|
+
extensions: ['.js', '.ts', '.json', '.vue'],
|
|
117
|
+
dedupe: [
|
|
118
|
+
// Ensure single instances of core libs and published packages
|
|
119
|
+
'vue',
|
|
120
|
+
'vuetify',
|
|
121
|
+
'pinia',
|
|
122
|
+
'vue-router',
|
|
123
|
+
'@vue-skuilder/db',
|
|
124
|
+
'@vue-skuilder/common',
|
|
125
|
+
'@vue-skuilder/common-ui',
|
|
126
|
+
'@vue-skuilder/courses',
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
// --- Dependencies optimization ---
|
|
130
|
+
optimizeDeps: {
|
|
131
|
+
// Help Vite pre-bundle dependencies from published packages
|
|
132
|
+
include: [
|
|
133
|
+
'@vue-skuilder/common-ui',
|
|
134
|
+
'@vue-skuilder/db',
|
|
135
|
+
'@vue-skuilder/common',
|
|
136
|
+
'@vue-skuilder/courses',
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
server: {
|
|
140
|
+
port: 5173, // Use standard Vite port for standalone projects
|
|
141
|
+
},
|
|
142
|
+
build: {
|
|
143
|
+
sourcemap: true,
|
|
144
|
+
target: 'es2020',
|
|
145
|
+
minify: 'terser',
|
|
146
|
+
terserOptions: {
|
|
147
|
+
keep_classnames: true,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
// Add define block for process polyfills
|
|
151
|
+
define: {
|
|
152
|
+
global: 'window',
|
|
153
|
+
'process.env': process.env,
|
|
154
|
+
'process.browser': true,
|
|
155
|
+
'process.version': JSON.stringify(process.version),
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
`;
|
|
159
|
+
|
|
160
|
+
await fs.writeFile(viteConfigPath, transformedContent);
|
|
161
|
+
}
|
|
162
|
+
|
|
90
163
|
/**
|
|
91
164
|
* Generate skuilder.config.json based on project configuration
|
|
92
165
|
*/
|
|
@@ -114,6 +187,129 @@ export async function generateSkuilderConfig(
|
|
|
114
187
|
await fs.writeFile(configPath, JSON.stringify(skuilderConfig, null, 2));
|
|
115
188
|
}
|
|
116
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Generate .gitignore file for the project
|
|
192
|
+
*/
|
|
193
|
+
export async function generateGitignore(gitignorePath: string): Promise<void> {
|
|
194
|
+
const gitignoreContent = `# Dependencies
|
|
195
|
+
node_modules/
|
|
196
|
+
/.pnp
|
|
197
|
+
.pnp.js
|
|
198
|
+
|
|
199
|
+
# Production builds
|
|
200
|
+
/dist
|
|
201
|
+
/build
|
|
202
|
+
|
|
203
|
+
# Local env files
|
|
204
|
+
.env
|
|
205
|
+
.env.local
|
|
206
|
+
.env.development.local
|
|
207
|
+
.env.test.local
|
|
208
|
+
.env.production.local
|
|
209
|
+
|
|
210
|
+
# Log files
|
|
211
|
+
npm-debug.log*
|
|
212
|
+
yarn-debug.log*
|
|
213
|
+
yarn-error.log*
|
|
214
|
+
pnpm-debug.log*
|
|
215
|
+
lerna-debug.log*
|
|
216
|
+
|
|
217
|
+
# Runtime data
|
|
218
|
+
pids
|
|
219
|
+
*.pid
|
|
220
|
+
*.seed
|
|
221
|
+
*.pid.lock
|
|
222
|
+
|
|
223
|
+
# Coverage directory used by tools like istanbul
|
|
224
|
+
coverage/
|
|
225
|
+
*.lcov
|
|
226
|
+
|
|
227
|
+
# nyc test coverage
|
|
228
|
+
.nyc_output
|
|
229
|
+
|
|
230
|
+
# Dependency directories
|
|
231
|
+
jspm_packages/
|
|
232
|
+
|
|
233
|
+
# TypeScript cache
|
|
234
|
+
*.tsbuildinfo
|
|
235
|
+
|
|
236
|
+
# Optional npm cache directory
|
|
237
|
+
.npm
|
|
238
|
+
|
|
239
|
+
# Optional eslint cache
|
|
240
|
+
.eslintcache
|
|
241
|
+
|
|
242
|
+
# Microbundle cache
|
|
243
|
+
.rpt2_cache/
|
|
244
|
+
.rts2_cache_cjs/
|
|
245
|
+
.rts2_cache_es/
|
|
246
|
+
.rts2_cache_umd/
|
|
247
|
+
|
|
248
|
+
# Optional REPL history
|
|
249
|
+
.node_repl_history
|
|
250
|
+
|
|
251
|
+
# Output of 'npm pack'
|
|
252
|
+
*.tgz
|
|
253
|
+
|
|
254
|
+
# Yarn Integrity file
|
|
255
|
+
.yarn-integrity
|
|
256
|
+
|
|
257
|
+
# parcel-bundler cache (https://parceljs.org/)
|
|
258
|
+
.cache
|
|
259
|
+
.parcel-cache
|
|
260
|
+
|
|
261
|
+
# Next.js build output
|
|
262
|
+
.next
|
|
263
|
+
|
|
264
|
+
# Nuxt.js build / generate output
|
|
265
|
+
.nuxt
|
|
266
|
+
dist
|
|
267
|
+
|
|
268
|
+
# Gatsby files
|
|
269
|
+
.cache/
|
|
270
|
+
public
|
|
271
|
+
|
|
272
|
+
# Storybook build outputs
|
|
273
|
+
.out
|
|
274
|
+
.storybook-out
|
|
275
|
+
|
|
276
|
+
# Temporary folders
|
|
277
|
+
tmp/
|
|
278
|
+
temp/
|
|
279
|
+
|
|
280
|
+
# Editor directories and files
|
|
281
|
+
.vscode/
|
|
282
|
+
.idea
|
|
283
|
+
.DS_Store
|
|
284
|
+
*.suo
|
|
285
|
+
*.ntvs*
|
|
286
|
+
*.njsproj
|
|
287
|
+
*.sln
|
|
288
|
+
*.sw?
|
|
289
|
+
|
|
290
|
+
# OS generated files
|
|
291
|
+
Thumbs.db
|
|
292
|
+
|
|
293
|
+
# Cypress
|
|
294
|
+
/cypress/videos/
|
|
295
|
+
/cypress/screenshots/
|
|
296
|
+
|
|
297
|
+
# Local development
|
|
298
|
+
.env.development
|
|
299
|
+
.env.production
|
|
300
|
+
|
|
301
|
+
# Package manager lockfiles (uncomment if you want to ignore them)
|
|
302
|
+
# package-lock.json
|
|
303
|
+
# yarn.lock
|
|
304
|
+
# pnpm-lock.yaml
|
|
305
|
+
|
|
306
|
+
# Skuilder specific
|
|
307
|
+
/src/data/local-*.json
|
|
308
|
+
`;
|
|
309
|
+
|
|
310
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
311
|
+
}
|
|
312
|
+
|
|
117
313
|
/**
|
|
118
314
|
* Generate project README.md
|
|
119
315
|
*/
|
|
@@ -203,6 +399,12 @@ export async function processTemplate(
|
|
|
203
399
|
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
204
400
|
await transformPackageJson(packageJsonPath, config.projectName, cliVersion);
|
|
205
401
|
|
|
402
|
+
console.log(chalk.blue('🔧 Creating vite.config.ts...'));
|
|
403
|
+
const viteConfigPath = path.join(projectPath, 'vite.config.ts');
|
|
404
|
+
if (existsSync(viteConfigPath)) {
|
|
405
|
+
await createViteConfig(viteConfigPath);
|
|
406
|
+
}
|
|
407
|
+
|
|
206
408
|
console.log(chalk.blue('🔧 Generating configuration...'));
|
|
207
409
|
const configPath = path.join(projectPath, 'skuilder.config.json');
|
|
208
410
|
await generateSkuilderConfig(configPath, config);
|
|
@@ -211,5 +413,9 @@ export async function processTemplate(
|
|
|
211
413
|
const readmePath = path.join(projectPath, 'README.md');
|
|
212
414
|
await generateReadme(readmePath, config);
|
|
213
415
|
|
|
416
|
+
console.log(chalk.blue('📄 Generating .gitignore...'));
|
|
417
|
+
const gitignorePath = path.join(projectPath, '.gitignore');
|
|
418
|
+
await generateGitignore(gitignorePath);
|
|
419
|
+
|
|
214
420
|
console.log(chalk.green('✅ Template processing complete!'));
|
|
215
421
|
}
|