create-jnrs-template-vue 1.0.5 → 1.0.6

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/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # JNRS 项目模板
2
+
3
+ #### 介绍
4
+
5
+ JNRS 项目初始化模板
6
+
7
+ #### 软件架构
8
+
9
+ TypeScript、Vue3、Vite、Pinia、Element Plus
10
+
11
+ #### 安装教程
12
+
13
+ ```shell
14
+ pnpm create jnrs-template-vue@latest jnrs-vue-app
15
+ ```
16
+
17
+ #### 项目结构
18
+
19
+ ```md
20
+ src/
21
+ ├── assets/ # 静态资源(图片、字体)
22
+ ├── components/ # 通用组件(可复用)
23
+ ├── composables/ # 自定义 Hook(useFetch, useModal)
24
+ ├── layouts/ # 布局组件(如 Header、Sidebar)
25
+ ├── pages/ # 页面级组件(对应路由)
26
+ ├── router/ # 路由配置
27
+ ├── stores/ # Pinia 状态管理
28
+ ├── utils/ # 工具函数(request, date, etc)
29
+ ├── views/ # 视图层(可选,与 pages 类似)
30
+ ├── App.vue # 根组件
31
+ └── main.ts # 应用入口(createApp、use(router))
32
+ ```
33
+
34
+ #### 使用说明
35
+
36
+ my-project 是你的新项目名称
37
+
38
+ ```shell
39
+ pnpm create jnrs-template-vue@latest jnrs-vue-app
40
+ cd jnrs-vue-app
41
+ pnpm dev
42
+ ```
package/bin/create.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { fileURLToPath } from 'url'
2
2
  import { dirname, join, relative } from 'path'
3
- import { promises as fs, existsSync } from 'fs' // ✅ 同时导入 promises 和 existsSync
3
+ import { promises as fs, existsSync } from 'fs'
4
4
  import { execSync, spawnSync } from 'child_process'
5
5
  import minimist from 'minimist'
6
6
  import prompts from 'prompts'
@@ -68,13 +68,13 @@ async function main() {
68
68
  const { name } = await prompts({
69
69
  type: 'text',
70
70
  name: 'name',
71
- message: 'Project name:',
72
- initial: 'my-vue-app',
71
+ message: '项目名称:',
72
+ initial: 'jnrs-vue-app',
73
73
  validate: (input) => {
74
- if (!input) return 'Project name is required.'
75
- if (existsSync(input)) return 'Directory already exists.' // ✅ 使用 existsSync
74
+ if (!input) return '请输入项目名称!'
75
+ if (existsSync(input)) return '目录已存在!'
76
76
  if (!isValidPackageName(input)) {
77
- return 'Invalid package name. Use lowercase, hyphens, and no special characters.'
77
+ return '包名称无效!请使用小写字母、连字符,不要使用特殊字符'
78
78
  }
79
79
  return true
80
80
  }
@@ -84,13 +84,13 @@ async function main() {
84
84
  } else {
85
85
  // 非交互模式:校验包名和目录
86
86
  if (!isValidPackageName(targetDir)) {
87
- console.error('❌ Invalid project name:', targetDir)
88
- console.error(' Package name must be valid (lowercase, no spaces, etc.)')
87
+ console.error('❌ 无效的项目名称:', targetDir)
88
+ console.error(' 包名称必须有效(小写、无空格等)')
89
89
  process.exit(1)
90
90
  }
91
91
  if (existsSync(join(process.cwd(), targetDir))) {
92
92
  // ✅ 同步检查
93
- console.error(`❌ Directory "${targetDir}" already exists.`)
93
+ console.error(`❌ 目录 "${targetDir}" 已存在!`)
94
94
  process.exit(1)
95
95
  }
96
96
  }
@@ -112,8 +112,8 @@ async function main() {
112
112
 
113
113
  // 安装依赖
114
114
  const packageManager = detectPackageManager()
115
- console.log(`\n📦 Detected package manager: ${packageManager}`)
116
- console.log(`Installing dependencies with ${packageManager}...\n`)
115
+ console.log(`\n📦 检测到包管理器: ${packageManager}`)
116
+ console.log(`准备通过 ${packageManager} 安装依赖项中...\n`)
117
117
 
118
118
  const [cmd, ...args] = getInstallCommand(packageManager)
119
119
  try {
@@ -124,7 +124,7 @@ async function main() {
124
124
  })
125
125
  } catch (e) {
126
126
  console.error(
127
- `\n⚠️ Failed to install dependencies. Run manually:\n cd ${relative(process.cwd(), root)} && ${cmd} ${args.join(' ')}`
127
+ `\n⚠️ 安装依赖项失败。请手动运行:\n cd ${relative(process.cwd(), root)} && ${cmd} ${args.join(' ')}`
128
128
  )
129
129
  process.exit(1)
130
130
  }
@@ -133,13 +133,13 @@ async function main() {
133
133
  const relativePath = relative(process.cwd(), root)
134
134
  const devCmd = getRunCommand(packageManager, 'dev')
135
135
 
136
- console.log(`\n✅ Done!`)
136
+ console.log(`\n✅ 项目创建成功! 👌`)
137
137
  console.log(`\n👉 cd ${relativePath}`)
138
138
  console.log(` ${devCmd}\n`)
139
139
  }
140
140
 
141
141
  main().catch((err) => {
142
142
  console.error(`\n🚨 Error: ${err.message}`)
143
- console.trace(err) // 可选:开发时显示堆栈
143
+ console.trace(err)
144
144
  process.exit(1)
145
145
  })
@@ -1,17 +1,17 @@
1
- # JNRS 框架通用包
1
+ # JNRS 项目模板
2
2
 
3
3
  #### 介绍
4
4
 
5
- 适配 system-general-framework-ts 系列所有项目
5
+ JNRS 项目初始化模板
6
6
 
7
7
  #### 软件架构
8
8
 
9
- Vue3、TypeScript、Vite、Pinia、Element Plus
9
+ TypeScript、Vue3、Vite、Pinia、Element Plus
10
10
 
11
11
  #### 安装教程
12
12
 
13
13
  ```shell
14
- pnpm add @jnrs/vue-core
14
+ pnpm create jnrs-template-vue@latest jnrs-vue-app
15
15
  ```
16
16
 
17
17
  #### 项目结构
@@ -36,5 +36,7 @@ src/
36
36
  my-project 是你的新项目名称
37
37
 
38
38
  ```shell
39
- pnpm create jnrs-template@latest my-project
39
+ pnpm create jnrs-template-vue@latest jnrs-vue-app
40
+ cd jnrs-vue-app
41
+ pnpm dev
40
42
  ```
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-jnrs-template-vue",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "As the name suggests.",
5
5
  "author": "Talia-Tan",
6
6
  "private": true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-jnrs-template-vue",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "A Vue3 + Vite + TS project template with monorepo packages for JNRS.",
5
5
  "keywords": [
6
6
  "vue",
@@ -33,6 +33,6 @@
33
33
  "fs-extra": "^11.2.0"
34
34
  },
35
35
  "scripts": {
36
- "release": "node ./bin/release.mjs"
36
+ "release": "node ./scripts/release.mjs"
37
37
  }
38
38
  }
package/bin/release.mjs DELETED
@@ -1,154 +0,0 @@
1
- /**
2
- * @Author : TanRui
3
- * @WeChat : Tan578853789
4
- * @File : release.mjs
5
- * @Date : 2025/11/12
6
- * @Desc. : 发布脚本:自动化版本更新、发布及提交
7
- */
8
-
9
- import { execSync } from 'node:child_process'
10
- import fs from 'node:fs/promises'
11
- import path from 'node:path'
12
- import { fileURLToPath } from 'node:url'
13
-
14
- function run(cmd, options = {}) {
15
- console.log(`> ${cmd}`)
16
- try {
17
- const result = execSync(cmd, {
18
- stdio: ['pipe', 'pipe', 'pipe'], // 关键:捕获 stderr
19
- ...options
20
- })
21
- return result.toString().trim()
22
- } catch (e) {
23
- // 提取 stderr 和 stdout
24
- const stderr = e.stderr?.toString().trim() || ''
25
- const stdout = e.stdout?.toString().trim() || ''
26
- const fullError = [stderr, stdout].filter(Boolean).join('\n') || e.message
27
- throw new Error(fullError)
28
- }
29
- }
30
-
31
- function hasUncommittedChanges() {
32
- const status = run('git status --porcelain --ignore-submodules=all .')
33
- return status.length > 0
34
- }
35
-
36
- function incrementPatchVersion(version) {
37
- const [major, minor, patch] = version.split('.').map(Number)
38
- return `${major}.${minor}.${patch + 1}`
39
- }
40
-
41
- const __dirname = path.dirname(fileURLToPath(import.meta.url))
42
- const pkgPath = path.resolve(__dirname, '..', 'package.json')
43
- // 新增:模板 package.json 路径
44
- const templatePkgPath = path.resolve(__dirname, '..', 'jnrs-template-vue', 'package.json')
45
-
46
- try {
47
- // 读取原始 package.json
48
- const pkgContent = await fs.readFile(pkgPath, 'utf8')
49
- const pkg = JSON.parse(pkgContent)
50
- const originalVersion = pkg.version
51
-
52
- console.log(`📦 当前包: ${pkg.name}@${originalVersion}`)
53
-
54
- if (hasUncommittedChanges()) {
55
- console.error('❌ 有未提交的更改,请先提交或暂存更改!')
56
- process.exit(1)
57
- }
58
-
59
- // ========== 新增逻辑开始:处理 jnrs-template-vue/package.json ==========
60
- console.log('📦🔧 正在处理模板包 jnrs-template-vue/package.json...')
61
-
62
- // 1. 读取模板 package.json
63
- const templatePkgContent = await fs.readFile(templatePkgPath, 'utf8')
64
- const templatePkg = JSON.parse(templatePkgContent)
65
- const originalTemplateVersion = templatePkg.version
66
- let hasModifiedTemplate = false
67
-
68
- try {
69
- // 2. 替换所有 "workspace:*" 为 "*"
70
- const replaceWorkspaceRefs = (obj) => {
71
- for (const key in obj) {
72
- if (typeof obj[key] === 'string' && obj[key] === 'workspace:*') {
73
- obj[key] = '*'
74
- } else if (typeof obj[key] === 'object' && obj[key] !== null) {
75
- replaceWorkspaceRefs(obj[key])
76
- }
77
- }
78
- }
79
-
80
- // 执行替换
81
- replaceWorkspaceRefs(templatePkg.dependencies || {})
82
- replaceWorkspaceRefs(templatePkg.devDependencies || {})
83
- replaceWorkspaceRefs(templatePkg.optionalDependencies || {})
84
- hasModifiedTemplate = true
85
-
86
- // 3. version +1
87
- templatePkg.version = incrementPatchVersion(originalTemplateVersion)
88
-
89
- // 4. 写入修改后的模板 package.json
90
- await fs.writeFile(templatePkgPath, JSON.stringify(templatePkg, null, 2) + '\n')
91
- console.log(`📦 模板包版本已更新至 ${templatePkg.version},workspace:* 已替换为 *`)
92
- } catch (err) {
93
- // 回滚模板修改
94
- console.log('↩️ 正在回滚 jnrs-template-vue/package.json 的修改...')
95
- try {
96
- if (hasModifiedTemplate) {
97
- // 恢复 workspace:* 和原始 version
98
- const rollbackPkg = JSON.parse(templatePkgContent)
99
- await fs.writeFile(templatePkgPath, JSON.stringify(rollbackPkg, null, 2) + '\n')
100
- }
101
- } catch (e2) {
102
- console.error('❌ 回滚模板文件时出错:', e2.message)
103
- }
104
- throw new Error(`处理模板包失败: ${err.message}`)
105
- }
106
- // ========== 新增逻辑结束 ==========
107
-
108
- // 手动计算新版本(主包)
109
- const newVersion = incrementPatchVersion(originalVersion)
110
- console.log(`🆕 新版本: ${newVersion}`)
111
-
112
- // 写入新版本(主包)
113
- pkg.version = newVersion
114
- await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
115
-
116
- // 尝试发布
117
- let published = false
118
- try {
119
- console.log('🚀 正在发布到 npm...')
120
- run('pnpm publish --no-git-checks')
121
- published = true
122
- } catch (err) {
123
- console.error('❌ npm 发布失败:', err.message)
124
- }
125
-
126
- if (published) {
127
- try {
128
- console.log('💾 正在提交版本变更...')
129
- run('git add package.json')
130
- run(`git add ${templatePkgPath.replace(/\\/g, '/')}`) // 确保路径兼容 Windows
131
- const commitMsg = `🅒🅘🅒🅓 ${pkg.name}@${newVersion} 发布成功!👌`
132
- run(`git commit -m "${commitMsg}"`)
133
- console.log(`\n✅ 包 ${pkg.name} 发布流程已完成!🎉🎉🎉`)
134
- } catch (err) {
135
- console.error('⚠️ 提交失败,但发布已成功。请手动提交 package.json 和模板包:', err.message)
136
- console.log(`\n✅ 包 ${pkg.name} 发布流程已完成!🎉🎉🎉`)
137
- }
138
- } else {
139
- // 回滚主包
140
- console.log('↩️ 正在回滚主包 version 修改...')
141
- pkg.version = originalVersion
142
- await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
143
-
144
- // 回滚模板包
145
- console.log('↩️ 正在回滚模板包修改...')
146
- await fs.writeFile(templatePkgPath, templatePkgContent)
147
-
148
- console.log('📦 已还原 package.json 和模板包到原始状态')
149
- process.exit(1)
150
- }
151
- } catch (err) {
152
- console.error('💥 脚本执行出错:', err.message)
153
- process.exit(1)
154
- }