flipped-aurora/gin-vue-admin · warning
不能使用已保留的package name
Error message
不能使用已保留的package name
What it means
Create also reserves the package names 'system' and 'example' when template == "package", because generated code would collide with gin-vue-admin's existing server module directories (server/system, server/example). Throwing early prevents overwriting/colliding with core modules.
Source
Thrown at server/service/system/auto_code_package.go:42
type autoCodePackage struct{}
// Create 创建包信息
// @author: [piexlmax](https://github.com/piexlmax)
// @author: [SliverHorn](https://github.com/SliverHorn)
func (s *autoCodePackage) Create(ctx context.Context, info *request.SysAutoCodePackageCreate) error {
switch {
case info.Template == "":
return errors.New("模板不能为空!")
case info.Template == "page":
return errors.New("page为表单生成器!")
case info.PackageName == "":
return errors.New("PackageName不能为空!")
case token.IsKeyword(info.PackageName):
return errors.Errorf("%s为go的关键字!", info.PackageName)
case info.Template == "package":
if info.PackageName == "system" || info.PackageName == "example" {
return errors.New("不能使用已保留的package name")
}
default:
break
}
if !errors.Is(global.GVA_DB.Where("package_name = ? and template = ?", info.PackageName, info.Template).First(&model.SysAutoCodePackage{}).Error, gorm.ErrRecordNotFound) {
return errors.New("存在相同PackageName")
}
create := info.Create()
return global.GVA_DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
err := tx.Create(&create).Error
if err != nil {
return errors.Wrap(err, "创建失败!")
}
code := info.AutoCode()
_, asts, creates, err := s.templates(ctx, create, code, true)
if err != nil {
return err
}View on GitHub (pinned to 3136500ef3)
Solutions
- Choose a different, non-reserved package name (e.g. 'biz-system', 'myadmin').
- If extending the built-in system module, modify core code directly instead of generating a package named 'system'.
- Rename the generated package folder after creation is impossible — pick the right name up front, since it maps to a server directory.
Example fix
// before
{ "template": "package", "packageName": "system" }
// after
{ "template": "package", "packageName": "mysystem" } Defensive patterns
Strategy: validation
Validate before calling
const RESERVED = ['system', 'example']
if (form.template === 'package' && RESERVED.includes(form.packageName)) {
throw new Error('不能使用已保留的package name')
} Try / catch
try {
await api.createPackage(payload)
} catch (e) {
if (e?.msg?.includes('保留')) {
form.packageName = ''
notify('请更换包名,system/example 为保留名')
} else { throw e }
} Prevention
- Keep a client-side denylist of reserved names mirroring the server.
- Prefix business packages with your project namespace (e.g. 'acme-').
- Never name generated packages after existing core modules.
When it happens
Trigger: Creating an auto-code package with template="package" and packageName set to the literal "system" or "example".
Common situations: Developers scaffolding a business package and picking 'system' thinking it extends the core system module; copied example payloads that still use packageName "example".
Related errors
AI-assisted analysis of flipped-aurora/gin-vue-admin@3136500ef3 (2026-08-31).
Data as JSON: /api/errors/eca0898063a3152e.
Report an issue: GitHub.