猿问

是否可以使用“go mod tidy”来清除除间接依赖项之外未使用的依赖项?

我知道这是通过删除不必要的依赖关系树来修剪依赖关系树的预期行为,但我的CI的一部分用于生成swagger文件。所以,最后。 将从文件中删除包,因为它们被列为(它们不是直接从源代码中使用的)。是否有解决方法?go mod tidygo-swaggerJSONgo mod tidygo-swaggergo.mod//indirect


这是我的文件:go.mod


...

require (

    github.com/go-openapi/errors v0.20.0 // indirect

    github.com/go-openapi/validate v0.20.2 // indirect

    github.com/go-swagger/go-swagger v0.26.1 // indirect

    github.com/gorilla/mux v1.8.0

    github.com/mailru/easyjson v0.7.7 // indirect

    github.com/spf13/afero v1.5.1 // indirect

    golang.org/x/mod v0.4.1 // indirect

    golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d // indirect

    golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43 // indirect

    golang.org/x/tools v0.1.0 // indirect

)

在我运行之后,只剩下这个:go mod tidy


    github.com/gorilla/mux v1.8.0

但是,我在生产环境中运行的Makefile上有以下目标:


$ swagger generate spec -o ./internal/ui/swagger.json

我有点想避免在运行后显式调用全局。你们对如何解决这个问题有什么建议吗?go getgo-swaggergo tidy


元芳怎么了
浏览 262回答 2
2回答

慕田峪7331174

我怀疑一种解决方法是:在其中一个项目源 .go 文件中显式导入包github.com/go-swagger/go-swagger/scan定义虚拟变量var _ = scan.Parse这样,您的来源将直接“使用”,这将不再通过去mod tidy修剪。github.com/go-swagger/go-swagger我会在名为 的go文件中这样做,只是为了记住为什么需要这个假导入。externalTools.go

炎炎设计

使用 go install 来安装 swagger 而不影响 go.mod。在你有一个单独的目标,安装swagger deps,然后运行它。我们的安排如下:MakefileROOT := $(PWD)DIST := ${ROOT}/dist# Could be /go or ${HOME}/go depending on build environmentexport GOPATH := ${ROOT}/go.PHONY: swaggerall: $(DIST)/app swaggerswagger: $(GOPATH)    go install -v github.com/go-swagger/go-swagger/cmd/swagger@latest    $(GOPATH)/bin/swagger version    $(GOPATH)/bin/swagger generate spec -o ./swagger-ui/swagger.json -m$(DIST)/app: $(DIST) $(GOPATH)    go build -v -o $(DIST)/app ./cmd/...$(DIST):    mkdir -p $(DIST)$(GOPATH):    mkdir -p $(GOPATH)
随时随地看视频慕课网APP

相关分类

Go
我要回答