yarn 构建的 Makefile 规则 - 如何表达对复制部署工件的依赖性
Makefile rule for yarn build - how to express a dependency for copy deployment artefacts
我正在为网络摄像机构建图像,其中应用程序是用 C 编写的,但输出图像还包含捆绑的 web-app 如果部署到相机的嵌入式网络服务。
我们使用 make 构建图像,我使用 yarn 构建网络应用程序。我想创建一个 makefile 规则,这样我就不会在每次构建图像时都执行 yarn build
。目前我有:
$(WEBAPP_PATH)/build: $(WEBAPP_PATH)
@echo Building web-app...
@pushd $(WEBAPP_PATH); yarn build; popd;
和
$(PACKAGE_PATH)/html: $(WEBAPP_PATH)/build $(PACKAGE_PATH)/.dir
@echo Copy html...
mkdir -p $@
cp -r $(WEBAPP_PATH)/build/index.html $@/
cp -r $(WEBAPP_PATH)/build/js $@/
但是我如何编写更精细的检查来确定是否需要构建捆绑包?
更新:我的问题实际上是如何检测网络应用程序构建工件是否已更新,因为它们的名称是随机的。
根据评论,似乎以下可能会产生您想要的效果:
1) 在运行s yarn 的规则中添加一个步骤:使其touch
成为一个文件。然后将该规则的目标设为触摸文件。应该更新此规则的依赖项以列出所有在 yarn 需要再次 运行 时发出信号的输入。 (注意:如果 index.html 的时间戳在每次 yarn 运行s 时都会发生变化,那么您可以使用它来代替 touchfile 和 touch 步骤。)
$(WEBAPP_PATH)/touchfile: $(WEBAPP_PATH) $(YARN_INPUTS)
@echo Building web-app...
@pushd $(WEBAPP_PATH); yarn build; popd;
touch $(WEBAPP_PATH)/touchfile
2) 然后更新您的捆绑复制规则,以依赖触摸文件的时间戳作为所有随机命名文件的代理。同时将此规则的目标更新为它生成的 index.html 的副本。
$(PACKAGE_PATH)/html/index.html: $(WEBAPP_PATH)/touchfile $(PACKAGE_PATH)/.dir
@echo Copy html...
mkdir -p $@
cp -r $(WEBAPP_PATH)/build/index.html $@/
cp -r $(WEBAPP_PATH)/build/js $@/
3) 执行 link 步骤的规则可以将 $(WEBAPP_PATH)/build/index.html
指定为依赖项,因为 copy
将更新其时间戳,从而触发 link规则。
我正在为网络摄像机构建图像,其中应用程序是用 C 编写的,但输出图像还包含捆绑的 web-app 如果部署到相机的嵌入式网络服务。
我们使用 make 构建图像,我使用 yarn 构建网络应用程序。我想创建一个 makefile 规则,这样我就不会在每次构建图像时都执行 yarn build
。目前我有:
$(WEBAPP_PATH)/build: $(WEBAPP_PATH)
@echo Building web-app...
@pushd $(WEBAPP_PATH); yarn build; popd;
和
$(PACKAGE_PATH)/html: $(WEBAPP_PATH)/build $(PACKAGE_PATH)/.dir
@echo Copy html...
mkdir -p $@
cp -r $(WEBAPP_PATH)/build/index.html $@/
cp -r $(WEBAPP_PATH)/build/js $@/
但是我如何编写更精细的检查来确定是否需要构建捆绑包?
更新:我的问题实际上是如何检测网络应用程序构建工件是否已更新,因为它们的名称是随机的。
根据评论,似乎以下可能会产生您想要的效果:
1) 在运行s yarn 的规则中添加一个步骤:使其touch
成为一个文件。然后将该规则的目标设为触摸文件。应该更新此规则的依赖项以列出所有在 yarn 需要再次 运行 时发出信号的输入。 (注意:如果 index.html 的时间戳在每次 yarn 运行s 时都会发生变化,那么您可以使用它来代替 touchfile 和 touch 步骤。)
$(WEBAPP_PATH)/touchfile: $(WEBAPP_PATH) $(YARN_INPUTS)
@echo Building web-app...
@pushd $(WEBAPP_PATH); yarn build; popd;
touch $(WEBAPP_PATH)/touchfile
2) 然后更新您的捆绑复制规则,以依赖触摸文件的时间戳作为所有随机命名文件的代理。同时将此规则的目标更新为它生成的 index.html 的副本。
$(PACKAGE_PATH)/html/index.html: $(WEBAPP_PATH)/touchfile $(PACKAGE_PATH)/.dir
@echo Copy html...
mkdir -p $@
cp -r $(WEBAPP_PATH)/build/index.html $@/
cp -r $(WEBAPP_PATH)/build/js $@/
3) 执行 link 步骤的规则可以将 $(WEBAPP_PATH)/build/index.html
指定为依赖项,因为 copy
将更新其时间戳,从而触发 link规则。