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

  1. Choose a different, non-reserved package name (e.g. 'biz-system', 'myadmin').
  2. If extending the built-in system module, modify core code directly instead of generating a package named 'system'.
  3. 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

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.