@dendronhq/safe-npm

中文文档
0.1.0发布于 2025/11/24ISCES Module近 30 天下载 3043

一个以安全为重点的 npm 安装器, 保护您的工程不受新损坏的软件包的影响

中文使用文档
文档目录28 节
  1. 这为什么存在?
  2. 如何运作
  3. 安装
  4. 从 npm 安装( 建议)
  5. 从源头构建
  6. 基本用途
  7. 从 package.json 安装依赖性
  8. 安装特定软件包
  9. 干跑看将安装什么
  10. 配置选项
  11. --min-age-days <n>
  12. --ignore <pkg1,pkg2>
  13. --strict
  14. --dev 编号 : --prod-only
  15. --strategy <direct|overrides>
  16. --registry <url>
  17. --dry-run
  18. 共同工作流程
  19. 保护新项目
  20. 审计现有项目
  21. CI/CD一体化
  22. 紧急更新
  23. 测试
  24. 如何保护你
  25. 限制
  26. 哲学
  27. 所需资源
  28. 许可证

安全无虞

一个以安全为重点的 npm 安装器, 保护您的工程不受新损坏的软件包的影响 .

这为什么存在?

对npm包的供应链攻击是一个日益增长的威胁. 攻击者有时以下列方式损害合法包裹:

  • 偷窃维护者证书
  • 向流行软件包发布恶意更新
  • 接收废弃的软件包

这些攻击往往突然发生——昨天安全的一揽子计划今天可能会被破坏. 安全无虞 保护您只需安装已公开时间(默认为90天)的软件包版本。 安全部门有时间发现并报告恶意释放, 然后再进入您的项目.

如何运作

当你跑的时候 safe-npm install,则:

  1. 从 package.json 命令行参数
  2. 查询 npm 注册以找到所有可用的版本
  3. 过滤最近发布的超过您最低年龄的版本
  4. 选择既符合您组装要求又符合年龄要求的最新版本
  5. 使用 npm 安装安全版本

例如,如果您指定 react@^18 和恶意的 [email protected] safe-npm将安装最新版本.

安装

# Install globally
npm install -g @kevins8/safe-npm

# Now you can use it anywhere
safe-npm install

从源头构建

# Clone and build
git clone <repository-url>
cd safe-npm
npm install
npm run build

# Link the binary globally
npm link

基本用途

从 package.json 安装依赖性

# Use the minimum age of 90 days (default)
safe-npm install

# Or specify your own minimum age
safe-npm install --min-age-days 120

安装特定软件包

# Install packages directly with version constraints
safe-npm install react@^18 lodash@^4.17.0

# These will be filtered to only use versions at least 90 days old
safe-npm install express --min-age-days 60

干跑看将安装什么

# Preview which versions would be installed without actually installing
safe-npm install --dry-run

配置选项

--min-age-days <n>

默认 : 90

一个软件包版本在安装前必须已经发布的最低天数.

示例 --min-age-days 120 要求包龄至少4个月.

何时调整 :

  • 提高最高安全性(例如关键生产系统180天)
  • 如果需要更新特性并接受略多的风险(如30天),则减少

--ignore <pkg1,pkg2>

一个绕过年龄要求的以逗号分隔的包列表. 这些包仍然会尊重 semver 范围,但忽略了最低年龄.

示例 --ignore typescript,@types/node

何时使用 :

  • 您信任的快速移动包( 如 TypeScript 或构建工具)
  • 贵组织的内部包裹
  • 急需最新功能的软件包

--strict

如果任何依赖性无法解决到符合年龄要求的版本,则有错误退出.

示例 safe-npm install --strict

何时使用 :

  • CI/CD 管道,如果您想在其中建造失败,而不是跳过问题包
  • 需要确定性的生产部署

--dev 编号 : --prod-only

控制哪些依赖性来自 package.json 进行处理.

实例:

  • safe-npm install --dev - 只安装依赖性
  • safe-npm install --prod-only - 只安装生产依赖

何时使用 :

  • 安装要求更严格的发展工具
  • 生产会建在您想要不同年龄政策的地方 dev vs 依赖性

--strategy <direct|overrides>

默认 : direct

安全 npm 如何安装解析版本 :

direct - 使用 npm install package@version

  • 简单明了
  • 适合一次性安装或脚本

overrides - 将已解决的版本写入 package.json 覆盖字段,然后运行 npm install

  • 在整个依赖树上执行版本(包括过渡依赖)
  • 说明: 此特性目前已禁用, 因为它尚未正确工作

--registry <url>

默认 : https://registry.npmjs.org

指定替代 npm 登记册.

示例 --registry https://registry.company.com

何时使用 :

  • 私人npm登记
  • 镜像或缓存

--dry-run

显示将安装什么而不做任何修改 .

示例 safe-npm install --dry-run

何时使用 :

  • 测试您的配置
  • 了解现有哪些版本
  • 在改变生产系统之前

共同工作流程

保护新项目

# Create a new project
mkdir my-project && cd my-project
npm init -y

# Install dependencies safely
safe-npm install express@^4 lodash

# This creates package-lock.json with versions at least 90 days old

审计现有项目

# Check what versions would be installed with age requirements
safe-npm install --dry-run

# If you're happy, install them
safe-npm install

CI/CD一体化

# In your CI pipeline, fail the build if any package can't meet age requirements
safe-npm install --strict --min-age-days 120

# Or allow newer packages for dev dependencies only
safe-npm install --prod-only --strict

紧急更新

# Need to urgently update a specific package? Add it to ignore list
safe-npm install --ignore package-with-critical-fix

测试

该项目包括一个可以运行的测试套房:

npm test

为了进行自动化测试,可以使用固定装置模拟登记答复:

export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install

定着文件应包含JSON,它反映每个包的npm注册响应.

如何保护你

现实世界情景:

  1. 一个流行的软件包 popular-lib 由信任的开发者维护
  2. 攻击者损害维护者的 npm 证书
  3. 攻击者出版物 [email protected] 恶意软件
  4. 使用的项目 ^5.0.0 将立即安装恶意版本
  5. 有了安全,你会继续使用 4.9.0 (最新版本来自90多天前)
  6. 安全研究者发现妥协并报告
  7. 恶意版本未发布
  8. 你从未安装过已关闭的版本

限制

  • 从一开始就不会保护那些恶意的软件包
  • 延迟访问合法的新功能和错误修正
  • 需要相信旧版本没有未发现的弱点
  • 基于年龄的过滤是高压的,不是保证

哲学

安全是取舍 安全无虞交易 血流成河的更新 以防供应链突然妥协 它是一个防御深度战略的一层,它也应该包括:

  • 定期安保审计npm audit(中文(简体) )
  • 在添加新软件包之前进行依赖性审查
  • 安全咨询监测
  • 使用锁文件确保可复制的构建
  • 在沙箱或集装箱环境中运行

所需资源

  • 节点.js 18或以上
  • npm(用于基础安装)

许可证

公务员制度委员会

版本与发布记录

@dendronhq/safe-npm 共发布 1 个版本,首次发布于 2025/11/24;过去 12 个月发布了 1 个版本。

版本发布日期距今
0.1.0latest2025/11/2411 个月前

关于 @dendronhq/safe-npm 的常见问题

@dendronhq/safe-npm 是什么?

一个以安全为重点的 npm 安装器, 保护您的工程不受新损坏的软件包的影响

如何安装 @dendronhq/safe-npm?

在项目目录运行 npm install @dendronhq/safe-npm,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 safe-npm,可以用 npx safe-npm 直接运行。

@dendronhq/safe-npm 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dendronhq__safe-npm 是否存在。

@dendronhq/safe-npm 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dendronhq/safe-npm 可以商用吗?

@dendronhq/safe-npm 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dendronhq/safe-npm 的下载量有多少?

根据 npm 官方下载统计,@dendronhq/safe-npm 在 2026/10/12 – 2026/11/10 这 30 天内被下载 3,043 次,日均约 101 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dendronhq/safe-npm 还在维护吗?

最新版本 0.1.0 发布于 2025/11/24(11 个月前);至今共发布 1 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/11/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。