github.com/bingoohuang/pkger@v0.0.0-20210127185155-a71b9df4c4c7/cmd/pkger/cmds/serve.go (about)

     1  package cmds
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	"github.com/bingoohuang/pkger"
     9  )
    10  
    11  type arrayFlags []string
    12  
    13  func (i arrayFlags) String() string {
    14  	return fmt.Sprintf("%s", []string(i))
    15  }
    16  
    17  func (i *arrayFlags) Set(value string) error {
    18  	*i = append(*i, value)
    19  	return nil
    20  }
    21  
    22  type serveCmd struct {
    23  	*flag.FlagSet
    24  	excludes arrayFlags
    25  }
    26  
    27  func (s *serveCmd) Name() string {
    28  	return s.Flags().Name()
    29  }
    30  
    31  func (f *serveCmd) Flags() *flag.FlagSet {
    32  	if f.FlagSet == nil {
    33  		f.FlagSet = flag.NewFlagSet("serve", flag.ExitOnError)
    34  		f.Var(&f.excludes, "exclude", "slice of regexp patterns to exclude")
    35  	}
    36  	return f.FlagSet
    37  }
    38  
    39  var defaultExcludes = []string{"testdata", "node_modules", "(\\/|\\\\)_.+", "(\\/|\\\\)\\.git.*", ".DS_Store"}
    40  
    41  func (s *serveCmd) Exec(args []string) error {
    42  	if len(args) == 0 {
    43  		args = []string{"."}
    44  	}
    45  
    46  	f, err := pkger.Open(args[0])
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	// TODO
    52  	// ex := append(defaultExcludes, s.excludes...)
    53  	// if err := pkger.Exclude(f, ex...); err != nil {
    54  	// 	return err
    55  	// }
    56  	defer f.Close()
    57  	fmt.Println(f.Path())
    58  
    59  	return http.ListenAndServe(":3000", http.FileServer(f))
    60  }