此分支的目标是:
- 更易于自托管 Unpkg
- 保持与上游兼容
- 保持依赖项更新
- 不进行功能更改或添加新功能
UNPKG 是一个快速、全球性的内容分发网络,提供 npm 上的所有内容。
准备工作:
git clone https://github.com/lzwme/unpkg.git
cd unpkg
pnpm i
cp .env.sample .env.local # 编辑 env.local 配置用于本地开发开发模式:
pnpm watch
pnpm servecp .env.sample .env.prod # 编辑 env.prod 配置用于生产环境
set NODE_ENV=production # 或 staging
pnpm build
pnpm pack将会生成一个类似 unpkg-<version>.tgz 的文件。
使用 pm2 在您的服务器上部署:
tar zxvf unpkg-<version>.tgz
cd package
# npm i --omit dev
pnpm i -P
pm2 -n unpkg start.js- 作用:解压一个
.tgz(即.tar.gz)格式的压缩包。 - 参数说明:
z:使用 gzip 解压;x:解包(extract);v:显示详细过程(verbose);f:指定文件名(后面紧跟文件名)。
- 结果:会解压出一个目录(通常叫
package/),里面包含项目的源代码和package.json等文件。
注:
<version>是占位符,实际文件名类似unpkg-1.2.3.tgz。
- 作用:进入解压后生成的
package目录。 - 这是因为 npm/pnpm 打包时默认会把内容放在
package/文件夹中(尤其是通过npm pack生成的.tgz包)。
- 作用:这是一行被注释掉的命令(以
#开头,不会执行)。 - 如果取消注释,它的意思是:
- 使用 npm 安装依赖;
--omit dev表示跳过开发依赖(devDependencies),只安装生产依赖(dependencies),适用于生产环境部署,减少安装体积和时间。
这里被注释掉了,说明后续改用 pnpm。
- 作用:使用 pnpm 安装依赖。
- 参数
-P是--prod的简写,等价于--production,即只安装生产依赖(跳过 devDependencies)。 - 与上面注释掉的
npm i --omit dev功能类似,但使用的是 pnpm 包管理器(更快、更节省磁盘空间)。
- 作用:使用 PM2(Node.js 进程管理工具)启动应用。
- 参数说明:
-n unpkg:给这个 PM2 进程起一个名字叫unpkg,方便后续管理(如pm2 restart unpkg);start.js:要执行的入口文件(通常是项目根目录下的启动脚本)。
- 效果:PM2 会在后台运行该 Node.js 应用,并提供进程守护、日志管理、自动重启等功能,适合生产环境。
- 解压发布的
.tgz包; - 进入解压后的项目目录;
- 使用 pnpm 安装仅生产环境所需的依赖;
- 用 PM2 启动服务,命名为
unpkg,入口为start.js。
这是一种典型的 Node.js 项目生产部署流程。
docker pull lzwme/unpkg
docker run -d -p 8080:8080 -e NPM_REGISTRY_URL=https://registry.npmjs.org -e ORGIN=* lzwme/unpkg使用docker部署的话,上述构建部署可忽略,直接使用docker方式部署(更推荐)
docker build . -t longmo/unpkg
# 内部私有docker registry
docker tag longmo/unpkg ${私有docker仓库目录}/unpkg:latest
docker push ${私有docker仓库目录}/unpkg:latest# 拉取镜像
docker pull ${私有docker仓库目录}/unpkg:latest启动可直接修改run-ucdn.sh进行快速docker启动或者,或者自行编写启动脚本
方式一:
# 直接修改使用已配置脚本修改启动unpkg方式
vim run-ucdn.sh
# -p 3888:8080 \
# -e NODE_ENV=production \
# -e NPM_REGISTRY_URL=https://registry.npmjs.org \
# -e ORIGIN=http://127.0.0.1:4873 \
# ${私有docker仓库目录}/unpkg:latest
source run-ucdn.sh方式二:
docker run -d -it --name ucdn --restart=always \
-p 3888:8080 \
-e NODE_ENV=production \
-e NPM_REGISTRY_URL=https://registry.npmjs.org \
-e ORIGIN=http://127.0.0.1:4873 \
harbor.***.com/base_image/unpkg:latest默认端口:容器8080,宿主机3888(根据自己实际情况调整) 默认公网NPM地址:NPM_REGISTRY_URL=https://registry.npmjs.org 默认私有NPM地址:ORIGIN=http://127.0.0.1:4873(根据自己实际私有库调整)
更多详情请查看 .env.sample 文件。
# 私有 registry url 配置
NPM_REGISTRY_URL=https://registry.npmjs.org
# 您的 unpkg 网站 url
ORIGIN=https://npmcdn.longmo.me
# 监听端口,默认为 8080
PORT=8080
# 启用调试
# DEBUG=1
# Google Analytics MEASUREMENT_ID,可以设置为空来禁用它
GTAG_MEASUREMENT_ID=UA-140352188-1
# ENABLE_CLOUDFLARE=1
# [email protected]
# CLOUDFLARE_KEY=testORIGIN: 设置 unpkg 服务的基础 URL,默认为https://unpkg.com,可用于自定义部署域名NPM_REGISTRY_URL: npm registry 地址,默认为https://registry.npmjs.orgPORT: 服务监听端口,默认为 8080DEBUG: 启用调试模式GTAG_MEASUREMENT_ID: Google Analytics ID,用于网站分析ENABLE_CLOUDFLARE: 启用 Cloudflare 集成CLOUDFLARE_EMAIL: Cloudflare 账户邮箱CLOUDFLARE_KEY: Cloudflare API 密钥
请访问 UNPKG 官方网站 了解更多使用方法。
我们的赞助商和捐助者列表在 SPONSORS.md 文件中。