yalc 在本组件库的使用说明
背景与场景
多包组件库(Vue2 + packages/*),希望在不发布 npm 的情况下,在外部项目实时使用最新改动。
npm link不够稳定;yalc 通过本地缓存 + lock 更可靠。内网/离线环境,可把 yalc 当作本地“私有 registry”。
核心命令速览
发布到本地缓存:
yalc publish推送更新到已安装项目:
yalc push <pkgName>在消费项目安装:
yalc add <pkgName>移除:
yalc remove <pkgName>
推荐流程(文字流程图)
开发/构建:在组件库内修改代码 →(可选)
npm run build:dist产出 lib本地发布:
yalc publish(或进入子包目录yalc publish)消费项目接入:消费项目执行
yalc add @tf/modules→npm install迭代更新:组件库继续开发 →
yalc push @tf/modules→ 消费项目自动更新依赖验收/回退:验证功能 → 不再需要时,消费项目
yalc remove @tf/modules→npm install
若要单独发布子包(如 flow-graph),确保子包有独立
package.json,在子包目录运行yalc publish / yalc push。
yalc 使用流程图
Mermaid 流程图(使用 mermaid-mcp 渲染)
以下流程图使用 mermaid-mcp 服务生成并渲染:
flowchart TD
A["开发/修改代码"] --> B{"是否需要构建?"}
B -->|是| C["执行 npm run build:dist"]
B -->|否| D["保持源码"]
C --> E["yalc publish"]
D --> E
E --> F["在消费项目 yalc add @tf/modules"]
F --> G["npm install 同步依赖"]
G --> H["本地调试/验证"]
H --> I{"有改动?"}
I -->|是| J["组件库继续开发"]
J --> K["yalc push @tf/modules"]
K --> G
I -->|否| L{"是否需要移除?"}
L -->|是| M["消费项目 yalc remove @tf/modules"]
M --> N["npm install 清理锁文件与缓存"]
L -->|否| O["保持依赖,正常使用"]
流程图:

🎨 在线编辑流程图
流程图说明:
📦 开始节点:开发/修改代码
🔀 判断节点(菱形):是否需要构建、是否有改动、是否需要移除
⚙️ 操作节点(矩形):执行构建、发布、安装等操作
🔄 循环流程:有改动时,通过
yalc push自动更新依赖,形成开发循环✅ 结束节点:保持依赖正常使用,或清理移除
流程要点:
开发阶段:可选择构建或直接使用源码
发布阶段:使用
yalc publish发布到本地缓存消费阶段:在消费项目中
yalc add并npm install迭代阶段:使用
yalc push自动推送更新,无需重新安装清理阶段:使用
yalc remove移除依赖
💡 提示:流程图由 mermaid-mcp 服务自动生成和验证。支持在 Mermaid Chart Playground 中在线编辑和预览。
具体命令示例(本仓库)
# 1) 在组件库根目录(可选构建)
npm run build:dist
# 2) 发布整个库
yalc publish
# 3) 在消费项目中添加
yalc add @tf/modules
npm install
# 4) 后续有改动时,在组件库中推送更新
yalc push @tf/modules
# 5) 消费项目中移除
yalc remove @tf/modules
npm install
注意事项
本仓库已在 devDependencies 中引入
yalc,可用npx yalc直接运行。建议忽略
yalc.lock和.yalc/(不要提交到 Git)。若发布源码而非构建产物,确认消费侧构建链路兼容(本库基于 Vue2、webpack4)。
yalc 只分发当前目录内容;是否带构建产物取决于你发布前是否执行了构建。
消费项目如果node_modules有了最新的包但是调试还是原来的代码,一定要记得删除node_modules下的.vite文件夹(vite缓存)。
常见问答
需要每次重装吗? 不需要,改动后执行
yalc push,已安装的消费项目会自动刷新依赖。可以同时发布多个包吗? 可以,在各自包目录运行
yalc publish,消费端用对应包名yalc add。如何确认发布的是构建产物还是源码? yalc 会打包当前目录;若需产物,请先构建再
yalc publish。