forked from mirror/pkger
commit
b4c1e6e713
203
README.md
203
README.md
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
[`github.com/markbates/pkger`](https://godoc.org/github.com/markbates/pkger) is a tool for embedding static files into Go binaries. It will, hopefully, be a replacement for [`github.com/gobuffalo/packr/v2`](https://godoc.org/github.com/gobuffalo/packr/v2).
|
[`github.com/markbates/pkger`](https://godoc.org/github.com/markbates/pkger) is a tool for embedding static files into Go binaries. It will, hopefully, be a replacement for [`github.com/gobuffalo/packr/v2`](https://godoc.org/github.com/gobuffalo/packr/v2).
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
* Go 1.13+
|
||||||
|
* Go Modules
|
||||||
|
|
||||||
## How it Works (Module Aware Pathing)
|
## How it Works (Module Aware Pathing)
|
||||||
|
|
||||||
Pkger is powered by the dark magic of Go Modules, so they're like, totally required.
|
Pkger is powered by the dark magic of Go Modules, so they're like, totally required.
|
||||||
|
@ -63,6 +68,49 @@ package <reader>
|
||||||
// Pkger stuff here
|
// Pkger stuff here
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Including Files at Package Time
|
||||||
|
|
||||||
|
There may be reasons where you don't reference a particular file, or folder, that you want embedded in your application, such as a build artifact.
|
||||||
|
|
||||||
|
To do this you may use either the [`github.com/markbates/pkger#Include`](https://godoc.org/github.com/markbates/pkger#Include) function to set a no-op parser directive to include the specified path.
|
||||||
|
|
||||||
|
Alternatively, you may use the `-include` flag with the `pkger` and `pkger list` commands.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pkger list -include /actions -include github.com/gobuffalo/buffalo:/app.go
|
||||||
|
|
||||||
|
app
|
||||||
|
> app:/actions
|
||||||
|
> app:/actions/actions.go
|
||||||
|
> app:/assets
|
||||||
|
> app:/assets/css
|
||||||
|
> app:/assets/css/_buffalo.scss
|
||||||
|
> app:/assets/css/application.scss
|
||||||
|
> app:/assets/images
|
||||||
|
> app:/assets/images/favicon.ico
|
||||||
|
> app:/assets/images/logo.svg
|
||||||
|
> app:/assets/js
|
||||||
|
> app:/assets/js/application.js
|
||||||
|
> app:/go.mod
|
||||||
|
> app:/locales/all.en-us.yaml
|
||||||
|
> app:/public
|
||||||
|
> app:/public/assets
|
||||||
|
> app:/public/assets/.keep
|
||||||
|
> app:/public/assets/app.css
|
||||||
|
> app:/public/images
|
||||||
|
> app:/public/images/img1.png
|
||||||
|
> app:/public/index.html
|
||||||
|
> app:/public/robots.txt
|
||||||
|
> app:/templates
|
||||||
|
> app:/templates/_flash.plush.html
|
||||||
|
> app:/templates/application.plush.html
|
||||||
|
> app:/templates/index.plush.html
|
||||||
|
> app:/web
|
||||||
|
> app:/web/web.go
|
||||||
|
> github.com/gobuffalo/buffalo:/app.go
|
||||||
|
> github.com/gobuffalo/buffalo:/logo.svg
|
||||||
|
```
|
||||||
|
|
||||||
## Reference Application
|
## Reference Application
|
||||||
|
|
||||||
The reference application for the `README` examples, as well as all testing, can be found at [https://github.com/markbates/pkger/tree/master/pkging/pkgtest/testdata/ref](https://github.com/markbates/pkger/tree/master/pkging/pkgtest/testdata/ref).
|
The reference application for the `README` examples, as well as all testing, can be found at [https://github.com/markbates/pkger/tree/master/pkging/pkgtest/testdata/ref](https://github.com/markbates/pkger/tree/master/pkging/pkgtest/testdata/ref).
|
||||||
|
@ -225,4 +273,159 @@ The following declarations in your source code will tell the parser to embed fil
|
||||||
* `pkger.Walk("<path>", filepath.WalkFunc)` - Embeds all files under the specified path.
|
* `pkger.Walk("<path>", filepath.WalkFunc)` - Embeds all files under the specified path.
|
||||||
* `pkger.Include("<path>")` - `Include` is a no-op that directs the pkger tool to include the desired file or folder.
|
* `pkger.Include("<path>")` - `Include` is a no-op that directs the pkger tool to include the desired file or folder.
|
||||||
|
|
||||||
|
### CLI Usage
|
||||||
|
|
||||||
|
To see what declarations the parser has found, you can use the `pkger parse` command to get a `JSON` list of the declarations.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pkger parse
|
||||||
|
|
||||||
|
{
|
||||||
|
".": [
|
||||||
|
{
|
||||||
|
"file": {
|
||||||
|
"Abs": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/foo/bar/baz",
|
||||||
|
"Path": {
|
||||||
|
"Pkg": "app",
|
||||||
|
"Name": "/foo/bar/baz"
|
||||||
|
},
|
||||||
|
"Here": {
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"ImportPath": "app",
|
||||||
|
"Module": {
|
||||||
|
"Path": "app",
|
||||||
|
"Main": true,
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"GoMod": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/go.mod",
|
||||||
|
"GoVersion": "1.13"
|
||||||
|
},
|
||||||
|
"Name": "main"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pos": {
|
||||||
|
"Filename": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/main.go",
|
||||||
|
"Offset": 629,
|
||||||
|
"Line": 47,
|
||||||
|
"Column": 27
|
||||||
|
},
|
||||||
|
"type": "pkger.MkdirAll",
|
||||||
|
"value": "/foo/bar/baz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": {
|
||||||
|
"Abs": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/foo/bar/baz/biz.txt",
|
||||||
|
"Path": {
|
||||||
|
"Pkg": "app",
|
||||||
|
"Name": "/foo/bar/baz/biz.txt"
|
||||||
|
},
|
||||||
|
"Here": {
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"ImportPath": "app",
|
||||||
|
"Module": {
|
||||||
|
"Path": "app",
|
||||||
|
"Main": true,
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"GoMod": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/go.mod",
|
||||||
|
"GoVersion": "1.13"
|
||||||
|
},
|
||||||
|
"Name": "main"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pos": {
|
||||||
|
"Filename": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/main.go",
|
||||||
|
"Offset": 706,
|
||||||
|
"Line": 51,
|
||||||
|
"Column": 25
|
||||||
|
},
|
||||||
|
"type": "pkger.Create",
|
||||||
|
"value": "/foo/bar/baz/biz.txt"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For a module aware list use the `pkger list` command.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pkger list
|
||||||
|
|
||||||
|
app
|
||||||
|
> app:/assets
|
||||||
|
> app:/assets/css
|
||||||
|
> app:/assets/css/_buffalo.scss
|
||||||
|
> app:/assets/css/application.scss
|
||||||
|
> app:/assets/images
|
||||||
|
> app:/assets/images/favicon.ico
|
||||||
|
> app:/assets/images/logo.svg
|
||||||
|
> app:/assets/js
|
||||||
|
> app:/assets/js/application.js
|
||||||
|
> app:/go.mod
|
||||||
|
> app:/locales/all.en-us.yaml
|
||||||
|
> app:/public
|
||||||
|
> app:/public/assets
|
||||||
|
> app:/public/assets/.keep
|
||||||
|
> app:/public/assets/app.css
|
||||||
|
> app:/public/images
|
||||||
|
> app:/public/images/img1.png
|
||||||
|
> app:/public/index.html
|
||||||
|
> app:/public/robots.txt
|
||||||
|
> app:/templates
|
||||||
|
> app:/templates/_flash.plush.html
|
||||||
|
> app:/templates/application.plush.html
|
||||||
|
> app:/templates/index.plush.html
|
||||||
|
> app:/web
|
||||||
|
> app:/web/web.go
|
||||||
|
> github.com/gobuffalo/buffalo:/logo.svg
|
||||||
|
```
|
||||||
|
|
||||||
|
The `-json` flag can be used to get a more detailed list in JSON.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pkger list -json
|
||||||
|
|
||||||
|
{
|
||||||
|
"ImportPath": "app",
|
||||||
|
"Files": [
|
||||||
|
{
|
||||||
|
"Abs": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/assets",
|
||||||
|
"Path": {
|
||||||
|
"Pkg": "app",
|
||||||
|
"Name": "/assets"
|
||||||
|
},
|
||||||
|
"Here": {
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/assets",
|
||||||
|
"ImportPath": "",
|
||||||
|
"Module": {
|
||||||
|
"Path": "app",
|
||||||
|
"Main": true,
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"GoMod": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/go.mod",
|
||||||
|
"GoVersion": "1.13"
|
||||||
|
},
|
||||||
|
"Name": "assets"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Abs": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/assets/css",
|
||||||
|
"Path": {
|
||||||
|
"Pkg": "app",
|
||||||
|
"Name": "/assets/css"
|
||||||
|
},
|
||||||
|
"Here": {
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/assets",
|
||||||
|
"ImportPath": "",
|
||||||
|
"Module": {
|
||||||
|
"Path": "app",
|
||||||
|
"Main": true,
|
||||||
|
"Dir": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref",
|
||||||
|
"GoMod": "$GOPATH/src/github.com/markbates/pkger/pkging/pkgtest/testdata/ref/go.mod",
|
||||||
|
"GoVersion": "1.13"
|
||||||
|
},
|
||||||
|
"Name": "assets"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ func (e *listCmd) Exec(args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
jay := struct {
|
jay := struct {
|
||||||
ImportPath string `json:"import_path"`
|
ImportPath string
|
||||||
Files []*parser.File `json:"files"`
|
Files []*parser.File
|
||||||
}{
|
}{
|
||||||
ImportPath: info.ImportPath,
|
ImportPath: info.ImportPath,
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,11 +45,21 @@ func (c *parseCmd) Exec(args []string) error {
|
||||||
m := map[string]parser.Decls{}
|
m := map[string]parser.Decls{}
|
||||||
|
|
||||||
for _, a := range args {
|
for _, a := range args {
|
||||||
info, err := here.Package(a)
|
var info here.Info
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if a == "." {
|
||||||
|
info, err = here.Dir(a)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
info, err = here.Package(a)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
decls, err := parser.Parse(info)
|
decls, err := parser.Parse(info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Path struct {
|
type Path struct {
|
||||||
Pkg string `json:"pkg"`
|
Pkg string
|
||||||
Name string `json:"name"`
|
Name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Path) String() string {
|
func (p Path) String() string {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue