1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# entcpkg example
An example of using `entc` (ent codegen) as package rather than an executable.
In this example, we have a file named `entc.go` under the `./ent` directory, that holds the
configuration for the codegen:
```go
// +build ignore
package main
import (
"log"
"strings"
"text/template"
"github.com/facebook/ent/entc"
"github.com/facebook/ent/entc/gen"
)
func main() {
// A usage for custom templates with external functions.
// One template is defined in the option below, and the
// second template is provided with the `Templates` field.
opts := []entc.Option{
entc.Funcs(template.FuncMap{"title": strings.ToTitle}),
entc.TemplateFiles("template/static.tmpl"),
}
err := entc.Generate("./schema", &gen.Config{
Header: `
// Copyright 2019-present Facebook Inc. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.
// Code generated by entc, DO NOT EDIT.
`,
Templates: []*template.Template{
template.Must(template.New("debug").
Funcs(gen.Funcs).
ParseFiles("template/debug.tmpl")),
},
}, opts...)
if err != nil {
log.Fatal("running ent codegen:", err)
}
}
```
As you can see, the file is tagged with `// +build ignore` in order to not include it
in the `ent` package. In order to run the codegen, run the file itself (using `go run`)
or run `go generate ./ent`. The `generate.go` file holds the `go run command`:
```go
package ent
//go:generate go run entc.go
```
The `generate.go` file is preferred if you have many `generate` pragmas in your project.
|