在go buffalo中,生成了一个忽略公共/资产的.gitignore文件。然而,同时,生成的css和js对于获得"真正的"水牛应用程序至关重要。因此,有一种我不完全理解的脱节,那就是默认情况下,任何构建应用程序的版本控制系统都会缺少对部署应用程序看似至关重要的东西
我注意到
-
buffalo构建不会在公共/资产中生成内容。
-
buffalo dev也不生成此内容。
-
删除
public/assets/*
后运行buffalo dev会导致网站没有任何CSS,这意味着它破坏了功能。
所以。据我所知,/public/assets既是必不可少的,也是非动态创建的。
因此,我的问题是,我如何在构建时在我的buffalo工作流中重新生成公共/资产(即,我如何保留.gitignore默认值(或如果不在版本控制中,人们通常在哪里打包他们的资产?
因此,要回答公共/资产在哪里生成的原始问题,答案是"在创建时"或"在构建时,如果没有,并且引导空目录"。希望在下面提到的PR合并后,这个问题的答案将是"在创建时,或者在构建时,如果它们还不存在于您的回购中(即因为它们被gitignore("。
这两点(为什么本地构建不生成它们+为什么docker构建不生成它(有完全无关和不同的答案,所以我将分别用不同的项目符号来处理它们。
-
我们发现,实际上,根据存储库的状态,如果您丢失/删除了webpack文件,buffalo环境不会为您重新生成它们,而且这不是一个bug,因为在不产生任何资产的情况下运行水牛城是一个有效的用例(尽管这不是一个对我来说非常有用的用例,但可能值得提出一个改变,让水牛城在这方面更有主见(。
-
关于docker构建本身,如果您在运行buffalo构建之前(即在Dockerfile中(添加
mkdir
语句以确保公共/资产存在,那么您可以补偿忽略该目录的git,并且它将在静态构建中正确填充。
由于后一个用例是更重要的用例,我在buffalo社区的指导下创建了一个pull请求来解决这个问题(即,使其不需要手动添加mkdir公共/资产步骤(,可以在这里找到:https://github.com/gobuffalo/buffalo/pull/1447.
简言之:在这个PR合并之前,如果你需要你的资产来构建你的可部署程序(你可能会这样做(,要么从gitignore中删除公共/资产行,并将它们提交给版本控制,这样你的代码就可以直接构建而无需外部依赖,要么确保你在运行水牛开发的同一个地方构建代码。如果有第三个答案的话。从我的角度来看,前者是更适合云的解决方案,但我是水牛城的新手,所以我可能在某些方面误解了这些习语。
免责声明:我回答这个问题是因为我认为它可能对人们有用,但我不是水牛专家关于资产如何在水牛城文档/网站上工作,有更深入的技术视角(https://gobuffalo.io/en/docs/assets)
有源代码管理,它包含您为应用程序创建的源代码,有构建服务器,它将源代码转换为可部署的工件,还有工件,它包含运行应用程序所需的一切(即资源、编译的二进制文件、无源代码(。
源代码管理通常是存储工件的糟糕解决方案;这就是为什么GitHub有发布功能的原因。在源代码管理之外,为您的工件找到一个合适的解决方案——您选择什么将取决于您的构建和操作环境以及部署系统。例如,S3是存储内部构建工件的流行选择,因为它非常易于使用,而且相当便宜。