【问题标题】:Makefile rule for yarn build - how to express a dependency for copy deployment artefacts纱线构建的 Makefile 规则 - 如何表达复制部署工件的依赖关系
【发布时间】:2017-11-24 15:32:36
【问题描述】:

我正在为网络摄像机构建一个图像,其中应用程序是用 C 编写的,但输出图像还包含一个捆绑的 web-app,如果部署到相机的嵌入式网络服务。

我们使用 ma​​ke 构建图像,我使用 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 $@/

但是我怎样才能为构建捆绑包的需要编写更细粒度的检查呢?

更新:我的问题实际上是如何检测网络应用构建工件是否已更新,因为它们的名称是随机的。

【问题讨论】:

  • 当您想要触发 web 应用程序的重建时所需的标准是什么——每当从相机写入新图像时?我从上下文中推测您看到 $(WEBAPP_PATH)/build 目标在每次运行 Make 时都会执行。是否标记为PHONY? (我也假设'bundle'是$(WEBAPP_PATH)/build目录的内容)
  • 我想避免每次运行 make 时都重新构建 Web 应用程序。另一方面,我想检测捆绑包何时更新,并且我想在输入被触摸时运行纱线。
  • 是的,我有点草率,但 WEBAPP_PATH 是 yarn.lock 文件和我找到的 web 应用程序项目的位置。 PACKAGE_PATH 是找到图像中间体的位置。捆绑包在全部上墨之前被复制到那里。
  • 我很困惑为什么你会看到$(WEBAPP_PATH)/build 目标火灾。一旦该目录存在,您不应该看到它再次运行 yarn 步骤...除非它被标记为 PHONY,或者您将其作为构建的一部分删除。
  • 这确实是我要问的问题 - 理想情况下,我想用纱线输出的内容替换 $(WEBAPP_PATH)/build,但是从 index.html 中出现,生成的文件具有随机的名称。那么如何检测变化呢?

标签: makefile yarnpkg


【解决方案1】:

根据 cmets,似乎以下可能会产生您想要的效果:

1) 在运行 yarn 的规则中添加一个步骤:使其 touch 成为一个文件。然后将该规则的目标设为触摸文件。应该更新此规则的依赖关系,以列出当纱线需要再次运行时发出信号的所有输入。 (注意:如果每次运行 yarn 时 index.html 的时间戳都会发生变化,那么您可以使用它来代替 touchfile 和 touch 步骤。)

$(WEBAPP_PATH)/touchfile: $(WEBAPP_PATH) $(YARN_INPUTS)
    @echo Building web-app...
    @pushd $(WEBAPP_PATH); yarn build; popd;
    touch $(WEBAPP_PATH)/touchfile

2) 然后更新你的 bundle-copy 规则以依赖 touchfile 的时间戳作为所有随机命名文件的代理。还将此规则的目标更新为它生成的 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) 执行链接步骤的规则然后可以指定$(WEBAPP_PATH)/build/index.html 作为依赖项,因为copy 将更新其时间戳,从而触发链接规则。

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多