# <img src="logo.png" alt="npm-to-cdn logo" width="80" align="left" /> npm-to-cdn

[![Website](https://img.shields.io/badge/website-triallord.github.io%2Fnpm--to--cdn-blue?logo=githubpages)](https://triallord.github.io/npm-to-cdn/)  
[![GitHub](https://img.shields.io/badge/github-TrialLord%2Fnpm--to--cdn-black?logo=github)](https://github.com/TrialLord/npm-to-cdn)
[![Coverage](https://img.shields.io/badge/coverage-coming_soon-lightgrey)](https://github.com/TrialLord/npm-to-cdn)

A professional open-source Node.js CLI tool to instantly get CDN links for any npm package from major providers.

---

## Features
- **Auto-discovers UMD files** from CDN file listings (unpkg, jsDelivr)
- Supports **unpkg, jsDelivr, esm.sh, skypack**
- **Minified/dev toggle**: `--min` (default) or `--dev`
- **Batch mode**: Query multiple packages at once
- **Clipboard**: Copy first CDN link with `--clipboard`
- **JSON output**: `--json` for machine-readable output
- **UMD-only**: `--umd` for just unpkg/jsDelivr UMD links
- **Show all versions**: `--versions` flag
- **Verbose/silent**: `--verbose` for debug, `--silent` for CI
- **Graceful error handling**

---

## Installation

```sh
npm install -g npm-to-cdn
```

---

## Usage

```sh
n2cdn react
n2cdn lodash@4.17.21
n2cdn axios --json
n2cdn vue --clipboard
n2cdn react@17 lodash@4.17.21 --json --silent
n2cdn react --versions
n2cdn react@17 --umd --verbose
n2cdn vue@2 --dev --umd
n2cdn react --cdnjs
n2cdn react --statically user/repo/tag/dist/file.js
n2cdn react --bowercdn
n2cdn react --template "https://mycdn.com/{name}@{version}/{file}"
```

### Flags
- `--json`       Output as JSON
- `--clipboard`  Copy first CDN link to clipboard
- `--umd`        Show only unpkg/jsDelivr UMD links
- `--min`        Prefer minified builds (default)
- `--dev`        Prefer development (non-minified) builds
- `--versions`   List all available versions for the package
- `--verbose`    Show all attempted URLs and debug info
- `--silent`     Suppress banner and only output links
- `--help`       Show help

> Only valid CDN links are shown. UMD guessing is version-aware and auto-discovers from CDN file listings.

---

## Supported CDN Providers

- **unpkg**
- **jsDelivr**
- **esm.sh**
- **skypack**
- **cdnjs**
- **Statically** (GitHub, GitLab, Bitbucket)
- **BowerCDN**
- **Custom templates**

## Usage Examples

```sh
n2cdn react --cdnjs
n2cdn react --statically user/repo/tag/dist/file.js
n2cdn react --bowercdn
n2cdn react --template "https://mycdn.com/{name}@{version}/{file}"
```

## CLI Improvements

- All provider flags are now grouped and clearly documented
- Input validation for statically flag
- Consistent flag naming and help output

---

## Example Output

```
$ n2cdn react@17 lodash@4.17.21 --json --silent
[
  {
    "pkg": "react",
    "version": "17",
    "cdns": {
      "unpkg": "https://unpkg.com/react@17/umd/react.production.min.js",
      "jsDelivr": "https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js",
      "esmSh": "https://esm.sh/react@17",
      "skypack": "https://cdn.skypack.dev/react@17"
    }
  },
  {
    "pkg": "lodash",
    "version": "4.17.21",
    "cdns": {
      "esmSh": "https://esm.sh/lodash@4.17.21",
      "skypack": "https://cdn.skypack.dev/lodash@4.17.21"
    }
  }
]
```

---

## Global Installation

This CLI is globally installable. After running:

```sh
npm install -g npm-to-cdn
```

You can use the `n2cdn` command anywhere.

---

## Links

- **Website:** [https://triallord.github.io/npm-to-cdn/](https://triallord.github.io/npm-to-cdn/)
- **GitHub:** [https://github.com/TrialLord/npm-to-cdn](https://github.com/TrialLord/npm-to-cdn)

---

## License

MIT 

## Planned Features

- Support for more CDN providers
- Custom CDN URL templates via CLI flag

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started.

## Code of Conduct

This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). 