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

如何提取package.json依赖版本并在Makefile中插值使用

实现方法

不需要额外安装任何第三方解析工具,直接在Makefile中调用Node.js内置能力读取package.json字段,将对应依赖的版本赋值给Makefile变量,安装时拼接包名@版本号的格式即可,全程不需要硬编码版本号,会自动同步package.json中的配置,不会拉取超出配置范围的新版本。

具体操作逻辑

  • 在Makefile头部定义版本变量,通过node -p命令直接执行JS语句解析package.json提取版本:
    • 读取devDependencies下的包版本,取值路径为require('./package.json').devDependencies['完整包名']
    • 读取dependencies下的包版本,将上述路径中的devDependencies替换为dependencies即可
  • 修改原有直接写包名的npm install命令,替换为包名@${对应版本变量}的格式,强制安装匹配package.json配置的版本。
  • 这种读取方式不依赖jq等额外工具,只要运行环境装有Node.js(前端项目运行环境默认自带)即可正常工作,适配Windows、macOS、Linux全平台,不会出现跨平台JSON解析失败的问题。

适配当前场景的完整Makefile示例

# 从package.json提取各依赖的指定版本
EYES_VERSION := $(shell node -p "require('./package.json').devDependencies['@applitools/eyes-testcafe']")
TESTCAFE_VERSION := $(shell node -p "require('./package.json').devDependencies['testcafe']")
# 注意如果@ffmpeg-installer/ffmpeg放在dependencies字段下,把下面路径里的devDependencies改成dependencies即可
FFMPEG_VERSION := $(shell node -p "require('./package.json').devDependencies['@ffmpeg-installer/ffmpeg']")

install-testcafe: npm ffmpeg applitools testcafe

# 安装项目全量依赖,默认就会按照package.json的版本配置安装
npm:
    npm install

# 安装ffmpeg录屏依赖,强制使用package.json指定版本
ffmpeg:
    npm install @ffmpeg-installer/ffmpeg@${FFMPEG_VERSION}

# 安装applitools依赖,强制使用package.json指定版本
applitools:
    npm install @applitools/eyes-testcafe@${EYES_VERSION}

# 全局安装TestCafe,强制使用package.json指定版本
testcafe:
    sudo npm install -g testcafe@${TESTCAFE_VERSION}

说明:如果package.json里的版本号带^、~、*这类范围符,npm会严格按照范围符规则安装匹配版本,和直接执行项目根目录npm install的版本逻辑完全一致,不会出现版本不匹配的问题。

内容的提问来源于stack exchange,提问作者Justin Grabenbauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:06:20