You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Makefile目标同时支持根目录与嵌套目录的node_modules?

解决同时支持根目录与子目录node_modules的Makefile规则问题

问题的核心在于你使用的%/node_modules模式规则要求目标中必须包含路径分隔符/,而根目录的node_modules没有前缀路径,因此无法匹配这个模式。Make会认为根目录的node_modules没有对应的构建规则,且当前文件已经存在(或者不存在但没有规则生成它),所以提示"Nothing to be done"。

要在不重复命令的前提下同时支持两种场景,你可以把构建命令提取为复用的宏或变量,然后分别定义根目录目标和模式目标:

解决方案代码

# 定义复用的安装命令宏
define INSTALL_NODE_MODULES
	cd $(shell dirname "$<") && npm install && touch node_modules
endef

# 根目录node_modules的规则
node_modules: package.json
	$(INSTALL_NODE_MODULES)

# 子目录node_modules的模式规则
%/node_modules: %/package.json
	$(INSTALL_NODE_MODULES)

原理说明

  1. 宏定义:通过define把重复的安装命令封装成一个宏INSTALL_NODE_MODULES,避免了代码冗余,后续修改命令只需要改这一处。
  2. 根目录规则:单独为node_modules目标绑定依赖package.json,调用复用的宏执行安装。
  3. 模式规则:%/node_modules继续匹配所有子目录下的node_modules目标,同样调用宏执行相同的命令逻辑。

这样无论你执行make node_modules(根目录)还是make path/to/subpackage/node_modules(子目录),Make都会找到对应的规则并执行正确的安装流程。

内容的提问来源于stack exchange,提问作者Robert Rossmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:56