用于解析节点模块的命令行工具

时间:2017-10-24 07:27:32

标签: gnu-make node-modules

我有一个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

有没有一些明显,简单,优雅的方法来做到这一点?

1 个答案:

答案 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内部配置管理的其他函数)。