create-aomex 0.0.1 → 0.0.2
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/index.d.ts +1 -2
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { }
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/input-package-manager.ts","../src/input-project-name.ts","../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nconst packageManagers = <const>['pnpm', 'npm', 'yarn'];\n\nexport type PackageManager = (typeof packageManagers)[number];\n\nexport const inputPackageManager = async (\n argv: Record<string, any>,\n): Promise<PackageManager> => {\n for (const expected of packageManagers) {\n if (argv[expected]) return expected;\n }\n\n const { manager } = await inquirer.prompt<{\n manager: PackageManager;\n }>({\n name: 'manager',\n message: '选择包管理工具',\n type: 'list',\n choices: packageManagers,\n default: 'pnpm',\n askAnswered: true,\n });\n\n return manager;\n};\n","import inquirer from 'inquirer';\nimport kebabCase from 'lodash.kebabcase';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\n\nexport const inputProjectName = async (\n argv: Record<string, any>,\n): Promise<string> => {\n if (typeof argv['name'] === 'string') return argv['name'];\n\n const result = await inquirer.prompt<{ projectName: string }>({\n name: 'projectName',\n type: 'input',\n message: '项目名称',\n suffix: ':',\n });\n\n const projectName = kebabCase(result.projectName);\n\n const absolutePath = path.posix.resolve(projectName);\n if (existsSync(absolutePath) && argv['force'] !== true) {\n const { goon } = await inquirer.prompt<{ goon: boolean }>({\n name: 'goon',\n type: 'confirm',\n message: `目录 \"${absolutePath}\" 已经存在,是否覆盖?`,\n suffix: ':',\n });\n\n if (!goon) {\n process.exit(0);\n }\n }\n\n return projectName;\n};\n","
|
|
1
|
+
{"version":3,"sources":["../src/input-package-manager.ts","../src/input-project-name.ts","../src/index.ts","../src/replace-variables.ts"],"sourcesContent":["import inquirer from 'inquirer';\n\nconst packageManagers = <const>['pnpm', 'npm', 'yarn'];\n\nexport type PackageManager = (typeof packageManagers)[number];\n\nexport const inputPackageManager = async (\n argv: Record<string, any>,\n): Promise<PackageManager> => {\n for (const expected of packageManagers) {\n if (argv[expected]) return expected;\n }\n\n const { manager } = await inquirer.prompt<{\n manager: PackageManager;\n }>({\n name: 'manager',\n message: '选择包管理工具',\n type: 'list',\n choices: packageManagers,\n default: 'pnpm',\n askAnswered: true,\n });\n\n return manager;\n};\n","import inquirer from 'inquirer';\nimport kebabCase from 'lodash.kebabcase';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\n\nexport const inputProjectName = async (\n argv: Record<string, any>,\n): Promise<string> => {\n if (typeof argv['name'] === 'string') return argv['name'];\n\n const result = await inquirer.prompt<{ projectName: string }>({\n name: 'projectName',\n type: 'input',\n message: '项目名称',\n suffix: ':',\n });\n\n const projectName = kebabCase(result.projectName);\n\n const absolutePath = path.posix.resolve(projectName);\n if (existsSync(absolutePath) && argv['force'] !== true) {\n const { goon } = await inquirer.prompt<{ goon: boolean }>({\n name: 'goon',\n type: 'confirm',\n message: `目录 \"${absolutePath}\" 已经存在,是否覆盖?`,\n suffix: ':',\n });\n\n if (!goon) {\n process.exit(0);\n }\n }\n\n return projectName;\n};\n","#!/usr/bin/env node\n\nimport { inputPackageManager } from './input-package-manager';\nimport { inputProjectName } from './input-project-name';\nimport path from 'node:path/posix';\nimport yargsParser from 'yargs-parser';\nimport { existsSync } from 'node:fs';\nimport { cp, mkdir, rm } from 'node:fs/promises';\nimport { Listr } from 'listr2';\nimport { promisify, styleText } from 'node:util';\nimport childProcess from 'node:child_process';\nimport { replaceVariables } from './replace-variables';\n\nconst argv = yargsParser(process.argv.slice(2));\nconst projectName = await inputProjectName(argv);\nconst packageManager = await inputPackageManager(argv);\nconst templateDir = path.join(import.meta.dirname, '..', 'templates');\nconst targetDir = path.resolve(projectName);\n\nconst exec = promisify(childProcess.exec);\nconst sleep = () => new Promise((resolve) => setTimeout(resolve, 500));\n\nconst spinner = new Listr([]);\n\nspinner.add({\n title: '创建目录',\n task: async () => {\n if (existsSync(targetDir)) {\n await rm(targetDir, { recursive: true, force: true });\n }\n await mkdir(targetDir, { recursive: true });\n process.chdir(path.resolve(projectName));\n },\n});\n\nspinner.add({\n title: 'git初始化',\n task: async () => {\n await exec('git init');\n await sleep();\n },\n});\n\nspinner.add({\n title: '复制模板文件',\n task: async () => {\n await cp(templateDir, targetDir, { recursive: true });\n await replaceVariables('package.json', { projectName, packageManager });\n await replaceVariables('README.md', { projectName, packageManager });\n await sleep();\n },\n});\n\nspinner.add({\n title: '增加volta配置',\n skip: async () => {\n return !/\\d\\.\\d/.test((await exec('volta -v')).stdout);\n },\n task: async () => {\n await exec('volta pin node');\n if (packageManager !== 'npm') {\n await exec(`volta pin ${packageManager}`);\n }\n },\n});\n\nspinner.add({\n title: '安装插件',\n task: async (_, task) => {\n const packages: { pkg: string; dev?: boolean }[] = [\n { pkg: '@aomex/core' },\n { pkg: '@aomex/web' },\n { pkg: '@aomex/console' },\n { pkg: '@aomex/router' },\n { pkg: '@aomex/cors' },\n { pkg: '@aomex/etag' },\n { pkg: '@aomex/compress' },\n { pkg: '@aomex/http-logger' },\n { pkg: '@aomex/commander' },\n { pkg: '@aomex/openapi' },\n { pkg: '@prisma/client' },\n { pkg: 'prisma', dev: true },\n { pkg: 'typescript', dev: true },\n { pkg: '@types/node', dev: true },\n { pkg: 'tsx', dev: true },\n { pkg: 'husky', dev: true },\n { pkg: 'tsc-alias', dev: true },\n { pkg: 'prettier', dev: true },\n { pkg: '@commitlint/cli', dev: true },\n { pkg: '@commitlint/config-conventional', dev: true },\n { pkg: 'eslint', dev: true },\n { pkg: '@typescript-eslint/eslint-plugin', dev: true },\n { pkg: '@typescript-eslint/parser', dev: true },\n { pkg: 'eslint-plugin-check-file', dev: true },\n ];\n const action = packageManager === 'npm' ? 'install' : 'add';\n const devSuffix = packageManager === 'npm' ? '--save-dev' : '-D';\n\n for (let i = 0; i < packages.length; ++i) {\n const { pkg, dev } = packages[i]!;\n task.title = '安装插件 ' + styleText('gray', pkg);\n await exec(`${packageManager} ${action} ${pkg} ${dev ? devSuffix : ''}`, {\n cwd: process.cwd(),\n env: process.env,\n });\n }\n task.title = '安装插件';\n },\n});\n\nspinner.add({\n title: '生成prisma/client文件',\n task: async () => {\n await exec('npx prisma generate');\n await sleep();\n },\n});\n\nawait spinner.run();\n\nconsole.log(\n '\\n项目创建成功:' + styleText(['blue', 'underline'], process.cwd()) + '\\n',\n);\n","import { readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const replaceVariables = async (\n filename: string,\n variables: Record<string, string>,\n) => {\n const packageJSONFile = path.resolve(filename);\n let packageContent = await readFile(packageJSONFile, 'utf8');\n Object.entries(variables).forEach(([key, value]) => {\n packageContent = packageContent.replaceAll(`{{${key}}}`, value);\n });\n await writeFile(packageJSONFile, packageContent);\n};\n"],"mappings":"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","names":["argv","inquirer","argv","projectName","path","existsSync","path","path","existsSync"]}
|