Appearance
开发可发布的 NPM 包
本文介绍如何为独立库项目配置并发布 NPM 包。
Creator 脚手架默认用于构建和上传地图脚本,是私有工程;它不预置
exports、files、npm run tsc或 NPM 发布流程。需要发布复用库时,建议单独创建库项目,并按本文配置。
1. 配置 exports 与 files
在独立库项目的 package.json 中,可以按入口实际输出配置:
jsonc
{
"exports": {
".": {
"import": "./dist/server/src/App.js",
"types": "./dist/server/src/App.d.ts"
},
"./client": {
"import": "./dist/client/src/App.js",
"types": "./dist/client/src/App.d.ts"
},
"./server": {
"import": "./dist/server/src/App.js",
"types": "./dist/server/src/App.d.ts"
},
"./shares": {
"import": "./dist/shares/src/App.js",
"types": "./dist/shares/src/App.d.ts"
}
},
"files": ["dist/**/*"]
}完成配置后:
你的包默认会导出几类入口:
- 根入口
"."(通常指向 server 侧逻辑); "./client":客户端入口;"./server":服务端入口;"./shares":共享模块入口。
- 根入口
使用者可以这样引用:
tsimport serverEntry from "your-package"; import clientEntry from "your-package/client"; import shared from "your-package/shares";files: ["dist/**/*"]表示:- 发布到 NPM 时,只会包含
dist/目录下的构建产物; - 源码(
src/等)不会被一并发布。
- 发布到 NPM 时,只会包含
如果你后续调整了构建输出路径(例如不再使用 dist/server/src/App.js 这一套路径),务必同步更新 exports 中的 import/types 指向,否则使用者会拿到错误的入口或类型声明。
2. 如何产出 NPM 包需要的 dist 目录
为库项目增加对应的 TypeScript 构建脚本后,才可以执行 tsc 产出 JS 与 d.ts。Creator 地图工程的 npm run build 只用于构建 Creator 脚本,不能直接作为 NPM 包的发布产物。
在构建之前,建议先清空库项目的 dist 目录,避免遗留无效文件,然后运行已配置的构建脚本:
sh
# 同时编译 server + client
npm run tscsh
# 同时编译 server + client
pnpm tscsh
# 同时编译 server + client
yarn tscsh
# 同时编译 server + client
bun run tsc常见做法:
- 确认
tsconfig的outDir指向dist/(或与上面的exports配置一致的目录); - 运行对应的
tsc命令(例如上面的npx tsc,或在package.json中封装的npm run build:types等脚本),把 TS 编译为 JS + d.ts; - 确认
dist/目录中已经包含:dist/client/src/App.js/App.d.tsdist/server/src/App.js/App.d.tsdist/shares/src/App.js/App.d.ts
如果你修改了入口文件名或目录结构:
- 比如不再用
App.ts作为入口,而是改成index.ts; - 或者把输出目录从
dist/server/src改成了dist/server;
需要同时检查三处是否保持一致:
tsconfig中的outDir、rootDir等;- Vite / 构建脚本中对输出路径的约定(如果有);
package.json的exports中import/types的具体路径。
3. 发布到 NPM 时的基本流程
当 dist/ 目录和 exports 配置都准备好之后,你可以按照常规 NPM 包流程发布:
确认
package.json中的:name:包名;version:版本号;main/module/types(如果你有额外配置)。
确认已经登录 NPM:
bashnpm login在项目根目录执行发布:
bashnpm publish --access=public
提醒:
- 更改导出路径或入口文件后,一定要重新检查
exports与files,避免发布出「能安装但无法正确导入」的版本。- 如果这个包是打算给神岛社区使用的,推荐发布到
@dao3fun组织名下,并参考「投稿社区:发布 NPM 包」一文的流程说明。
完成这些库项目配置后,就具备了「从 TS 源码 → dist 输出 → NPM 包导出」的基础。Creator 地图工程使用此类公共包时,安装依赖即可;不要把 Creator Profile、永久地图 ID 或 CLI Token 打进 NPM 包。
- 保证编译的输出路径与
exports对齐; - 在需要时调整入口文件名 / 目录结构并同步配置;
- 按标准 NPM 流程发布即可。