在Makefile中使用SED将由Thread生成的文件名替换为散列

在Makefile中使用SED将由Thread生成的文件名替换为散列,sed,makefile,yarnpkg,Sed,Makefile,Yarnpkg,我在一个Makefile中使用warn build命令,该命令生成两个文件,其名称包含哈希,如main.abc123.js和main.def456.css 这些文件需要从HTML文件中引用,所以我尝试了自动化整个过程。我的Makefile中的相关部分是: build-da: yarn build $(eval JS_FILE:=$(shell python -c 'import json, os; config=json.load(open("build/asset-manif

我在一个Makefile中使用
warn build
命令,该命令生成两个文件,其名称包含哈希,如
main.abc123.js
main.def456.css

这些文件需要从HTML文件中引用,所以我尝试了自动化整个过程。我的Makefile中的相关部分是:

build-da:
    yarn build

    $(eval JS_FILE:=$(shell python -c 'import json, os; config=json.load(open("build/asset-manifest.json")); print(os.path.basename(config["main.js"]))'))
    $(eval CSS_FILE:=$(shell python -c 'import json, os; config=json.load(open("build/asset-manifest.json")); print(os.path.basename(config["main.css"]))'))

    $(SED) -i -e 's/main\.[^.]*\.js/$(JS_FILE)/g' my_file.html
    $(SED) -i -e 's/main\.[^.]*\.css/$(CSS_FILE)/g' my_file.html
基本上,我从
asset manifest.json
获取生成的文件名,并尝试使用sed替换html文件中的名称


这种方法在80-90%的情况下都能很好地工作,但有时会无缘无故地失败,所以我试图找出它的错误所在。

“但有时会无缘无故地失败”。。。你怎么知道?它不会替换文件名。“无任何原因”=它不会给出任何错误或警告。我想到的sed“失败”的唯一原因是,在sed看到它之后,my_file.html被覆盖。
warn build
是否生成生成此文件的进程,或者my_file.html是构建的静态部分?
my_file.html
是静态的。生成的文件是
assetmanifest.json
,我从中获取所需的文件名。但是我重复了vars
JS_文件
CSS_文件
,它们每次都被正确地检索到。1)在相同的情况下,它是否始终失败?2) 在故障情况下,您看到哪些sed命令回显到屏幕上?