# @dendronhq/safe-npm 中文文档

规范地址：https://npmcn.com/package/%40dendronhq/safe-npm/

版本：0\.1\.0
npm 元数据更新时间：2025-11-23T21:57:56.637Z
中文译文更新时间：2026-11-12T03:36:12.708Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dendronhq/safe-npm
原文对照：https://npmcn.com/package/%40dendronhq/safe-npm/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：22.6 kB，5 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：3 个
- 首次发布：2025-11-23T21:57:56.132Z
- 最新版本发布：2025-11-23T21:57:56.400Z
- 近 30 天下载量：3043（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 1 个）

## 中文简介

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

## 安装

```sh
npm install @dendronhq/safe-npm
```

也可以使用：`pnpm add @dendronhq/safe-npm`、`yarn add @dendronhq/safe-npm`、`bun add @dendronhq/safe-npm`

## README

# 安全无虞

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

## 这为什么存在?

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

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

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

## 如何运作

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

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

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

## 安装

### 从 npm 安装( 建议)

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

# Now you can use it anywhere
safe-npm install
```

### 从源头构建

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

# Link the binary globally
npm link
```

## 基本用途

### 从 package.json 安装依赖性

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

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

### 安装特定软件包

```bash
# 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
```

### 干跑看将安装什么

```bash
# 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`

**何时使用 :**

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

## 共同工作流程

### 保护新项目

```bash
# 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
```

### 审计现有项目

```bash
# 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一体化

```bash
# 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
```

### 紧急更新

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

## 测试

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

```bash
npm test
```

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

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

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

## 如何保护你

**现实世界情景:**

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

## 限制

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

## 哲学

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

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

## 所需资源

-   节点.js 18或以上
-   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 和提交记录判断。

