# tnpm-bridge

> 外部服务商合作模式下，tnpm包共享的解决方案

Latest version **2.0.7** (published 2022-02-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install tnpm-bridge
pnpm add tnpm-bridge
yarn add tnpm-bridge
bun add tnpm-bridge
```

Provides the commands `tb`, `tnpm-bridge`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.7 |
| Published | 2022-02-13 |
| First published | 2022-02-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 362.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Sherry Zhang |
| Maintainers | z_listening |
| Keywords | js, component, js-component, component-js |

## Links

- npm: https://www.npmjs.com/package/tnpm-bridge
- Repository: https://git.code.tencent.com/sherry_npm/tnpm-bridge
- npm.io page: https://npm.io/package/tnpm-bridge

## Dependencies (5)

- [chalk](https://npm.io/package/chalk.md) ^4.1.1
- [yargs](https://npm.io/package/yargs.md) ^13.2.4
- [shelljs](https://npm.io/package/shelljs.md) ^0.8.4
- [progress-estimator](https://npm.io/package/progress-estimator.md) ^0.3.0
- [removeNPMAbsolutePaths](https://npm.io/package/removeNPMAbsolutePaths.md) ^2.0.0

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 2.0.7 (latest) — 2022-02-13
- 1.0.10 — 2022-02-13

## README

<br>
外部服务商合作模式下的腾讯内网包使用的解决方案。
<br>
<br>

# 背景
腾讯内网的 npm 源站，外部同学无法访问。
在项目架构使用了一些内网包的情况下，合作的外部服务商同学无法使用 npm 进行包的下载安装，造成协作困难。

<br>
<br>

# 快速开始
## 1、安装
全局安装：
```bash
npm install tnpm-bridge -g
```
局部安装：
```bash
npm install tnpm-bridge -D
```

<br>

## 2、使用 - 全局使用

**请在你的项目的根目录下执行**

<br>

### 腾讯内部同学使用

<br>

```bash
tb i --inner
```
或
```bash
tb i -i
```

<br>

【说明】<br>
如上指令，默认安装项目 package.json 声明的**所有包**，并自动将 node_modules/@tencent 整个文件夹复制到项目 src/lib 目录下。

<br>

### 外部服务商同学使用

<br>

```bash
tb i --outer
```
或
```bash
tb i -o
```

<br>

【说明】<br>
如上指令，默认安装<br>
1）项目 package.json **声明的所有非腾讯内网包**<br>
2）src/lib/@tencent 中的**腾讯内网包依赖的所有非腾讯内网包**<br>
并自动将 src/lib/@tencent 整个文件夹复制到 node_modules 目录下。

<br>

## 3、使用 - 局部使用

项目 package.json 添加：
```json
  "scripts": {
    "inner": "tb i --inner",
    "outer": "tb i --outer"
  }
```

<br>
<br>

# 详细文档
## 1、支持指令
tnpm-bridge为安装包而生，仅支持 npm 的 install 与 i 指令。

<br>

```bash
tb install [options]
```
或
```bash
tb i [options]
```

<br>

## 2、配置文件
开发者可以在项目根目录下新建 .tnpmbridgerc.json 文件，自定义 @tencent 包的缓存位置。

例如：
``` json
{
  "libPath": "src/lib/my-lib"
}
```
tnpm-bridge 会将 @tencent 包，整体复制到 src/config/my-lib 下，即：src/config/my-lib/@tencent。

**【注】<br>.tnpmbridgerc.json 目前仅支持 libPath 一个字段配置。使用配置文件，便于后续能力扩展。**

<br>

## 3、支持参数
| 名称 | 含义 | 取值 |
|  ----  | ----  | ----  |
| -h | 获取帮助信息 | - |
| -v | 获取版本号 | - |
| --inner | 指明你的身份为内部同学 | - |
| -i | --inner的简写 | - |
| --outer | 指明你的身份为外部同学 | - |
| -o | --outer的简写 | - |
| --libPath | 开发者自定义的 @tencent 包缓存路径，优先级高于.tnpmbridgerc.json中的配置 |string<br>默认为 项目根目录/src/lib|
| --configPath | .tnpmbridgerc.json配置文件存放位置 | string<br>默认为项目根目录（即当前执行tb指令的位置） |
| --pkg | 新增单个包时，用于指明安装的 @tencent 包名称，仅在 --inner/-i 时生效 | string<br>如: @tencent/aegis-web-sdk |

<br>
<br>

## 4、更多使用 Demo

### 4.1 自定义 @tencent 包存放位置
```bash
tb i -i --libPath src/lib/my-lib
```
tnpm-bridge 会将 @tencent 包，整体复制到 src/lib/my-lib 下，即：src/lib/my-lib/@tencent。

<br>

### 4.2 自定义配置文件存放位置
```bash
tb i -i --configPath config/.tnpmbridgerc.json
```
tnpm-bridge 会去根目录下的 config/.tnpmbridgerc.json 读取配置内容。

<br>

另外，你也可以自定义配置文件名称：
```bash
tb i -i --configPath config/.my-tnpmbridgerc.json
```

<br>

### 4.3 新增 @tencent 包
```bash
tb i -i --pkg @tencent/aegis-web-sdk
```
tnpm-bridge 会在安装完 @tencent/aegis-web-sdk 后，自动同步到项目的 src/lib 目录下（或开发者自定义的 libPath 下）

<br>

### 4.4 传入 npm install 原生支持的参数
有时候，单纯的 npm install 指令，可能无法满足你的安装需求。这时，你可以像使用原生 npm install 安装一样，给 tnpm-bridge 传入你需要的参数。<br>

例如，你想执行：
```bash
npm install --force
```

<br>

使用 tnpm-bridge，你只要这样做：
```bash
tb i --inner --force
```
或
```bash
tb i --outer --force
```

<br>

【说明】<br>
在 tb i -i 或 tb i -o 后面，你可以传入任意 npm install 原生支持的参数，但注意， tb i -i 或 tb i -o 指令，是必需的，不可被置换的。例如，你不可以省略 -i 或 -o 参数，直接执行 tb i --force。

<br>

# 方案思路
### 内部同学
在内网环境下，下载 @tencent/* 内网包。
下载到 node_modules 后，将内网包同步到项目 src 目录下。

<br>

### 外部服务商同学
在外网环境下，使用 git 拉取回 src 下的内网包，再将内网包复制到 node_modules 下。

<br>

### 注意点
1、内部同学将内网包同步到 src 下后，编译打包时，注意合理处理 src 下的内网包。特别对于小程序，**注意不要将 src 下的内网包打包到小程序发布包中，导致包体积过大。**

2、外部同学不可再直接使用 npm install 或 yarn 的方式，进行全部包安装，因为 package.json 中含有腾讯内网包声明，直接安装会报错。单个npm包安装可正常使用。

---
_Source: https://npm.io/package/tnpm-bridge · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
