如何默认配置NPM使其忽略超过指定时间阈值的软件包版本?
家庭环境下限制npm默认显示旧版本包的方案
嘿,这个需求确实很贴合当前供应链攻击的防护需求,我给你几个适合家庭环境的简单方案,一步步来就行:
方法一:用自定义脚本替代默认npm view(灵活可控,无需额外工具)
npm本身没有直接的配置项来按时间过滤版本,但我们可以写个简单的脚本帮我们自动筛选最近2个月的版本,适合喜欢自己折腾的用户:
- 编写bash脚本(Mac/Linux用户,Windows可以转成批处理或者用WSL),比如命名为
npm-safe-view.sh:
#!/bin/bash # 接收要查询的包名作为参数 PACKAGE=$1 # 计算当前时间往前推2个月的时间戳(单位:秒) THRESHOLD=$(date -v-2m +%s) # 遍历该包的所有版本,过滤出发布时间在阈值之后的版本 npm view $PACKAGE versions --json | jq -r '.[]' | while read VERSION; do # 获取该版本的发布时间 PUBLISH_TIME=$(npm view $PACKAGE@$VERSION time --json | jq -r '.') # 把发布时间转换成时间戳 PUBLISH_TIMESTAMP=$(date -j -f "%Y-%m-%dT%H:%M:%S.%Z" "$PUBLISH_TIME" +%s) # 对比时间戳,符合条件就输出版本号 if [ $PUBLISH_TIMESTAMP -ge $THRESHOLD ]; then echo $VERSION fi done
- 安装依赖工具jq:这是用来解析npm返回的JSON数据的,Mac用
brew install jq,Ubuntu/Debian用sudo apt install jq。 - 设置别名:把脚本加入环境变量,比如编辑
~/.bashrc或者~/.zshrc,添加一行:
alias npm-view-safe='~/你的脚本路径/npm-safe-view.sh'
之后只要输入npm-view-safe <包名>,就能只看到最近2个月发布的版本了。
方法二:用npm-check-updates工具快速过滤(最简便)
如果不想写脚本,npm-check-updates(简称NCU)这个工具能帮你一键筛选符合时间条件的版本,完全适合家庭用户:
- 全局安装NCU:
npm install -g npm-check-updates
- 查询单个包的近期版本:
比如当前是2024年5月,要查最近2个月(即2024年3月1日之后)的版本,输入:
ncu --package <你的包名> --filterVersion '>=2024-03-01'
它会直接列出符合时间要求的版本号,操作非常简单。如果是要检查项目依赖里的包,直接在项目根目录运行ncu --filterVersion '>=2024-03-01'就行。
方法三:轻量本地代理verdaccio(全局生效,接近企业方案)
如果想要所有npm操作都自动过滤旧版本,不用每次手动输入命令,可以试试verdaccio——这是个超轻量的npm私有代理,占用资源极少,家庭电脑完全能跑:
- 安装verdaccio:
npm install -g verdaccio
- 启动代理:直接输入
verdaccio,它会默认在本地http://localhost:4873运行。 - 配置npm使用这个代理:
npm set registry http://localhost:4873
- 添加版本过滤规则:找到verdaccio的配置文件(默认在
~/.config/verdaccio/config.yaml),修改packages部分:
packages: '**': access: $all publish: $authenticated proxy: npmjs # 找不到的包会去官方npm仓库拉取 # 添加版本过滤,只允许拉取2024年3月1日之后的版本 filters: versions: '>=2024-03-01'
保存后重启verdaccio,之后所有npm安装、查看版本的操作都会自动过滤掉2个月前的旧版本,完全不用手动干预。
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

