我有一个multi-repo / mono-repo makefile,为了表达sub-repos之间的依赖关系并避免一直重建所有内容,我想从makefile中引用一个依赖节点模块。但是,由于我设置的方式,这个模块可能实际存在于repo本身的qs = Location.objects.filter(city__id='683506').values_list('options', flat=True)
options = set(chain(*qs))
下,或父目录中,依此类推。
换句话说,我想根据节点模块分辨率算法找到一个包。像这样:
node_modules
有没有一些明显,简单,优雅的方法来做到这一点?
答案 0 :(得分:0)
不幸的是我不知道节点解析算法,但是这里有三个函数试图从GNUmake中查找文件:
Element1
#----------------------------------------------------------------------
# $1 filename
# $2 dirname (all subdirectories will be searched too)
search-down=$(if $(wildcard $2/$1),$(wildcard $2/$1),$(foreach dir,$(wildcard $2/*/.),$(call search-down,$1,$(subst /. ,,$(dir) ))))
#----------------------------------------------------------------------
# $1 filename
# $2 dirname within which (+subdirectories) filename is to be found
# $3 current directory
search-up=$(if $(wildcard $3/$1),$(wildcard $3/$1),$(if $(wildcard $3/$2),$(call search-down,$1,$3/$2),$(call search-up,$1,$2,$3/..)))
#----------------------------------------------------------------------
# $1 filename
# $2 dirname within which (+subdirectories) filename is to be found
search-above=$(firstword $(call search-up,$1,$2,$(wildcard .)))
可能是您想要的:它从您当前的工作目录向上查找文件 filename ,查看每个子目录 dirname 并通过所有孩子。即如果您在search-above
并且想要找到/home/torazaburo/foo/bar/baz
,那么就/home/torazaburo/foo/ding/dong/dang.js
。您甚至可以进一步区别对待,$(call search-above,dang.js,ding)
仅从$(call search-above,dang.js,ding/dong)
开始向下搜索,并忽略/home/torazaburo/foo/ding/dong
中的任何其他子目录。
可以在gmtt中找到这些函数(以及用于GNUmake内部配置管理的其他函数)。