还在为调试组件库发愁吗?yalc 帮你一把

前言

哈喽大家好!我是 嘟老板。最近在开发组件库的过程中,发现了一个比较好用的工具,让我可以用 npm 的操作轻松完成本地调试,分享给大家。

什么是 yalc

  • 定位 : 本地"迷你私有 npm 仓库"。将包发布到本机的 yalc 仓库,再让其他项目从这个"仓库"安装,避免 npm link 带来的软链与重复依赖问题。
  • 优势
    • 可复现: 以打包产物为准,接近真实发包。
    • 稳定 : 解决 npm link 多 React/多实例等问题。
    • 简单: 一条命令推送更新,消费者一条命令升级。

安装

bash 复制代码
npm i -g yalc
# 或
pnpm add -g yalc
# 或
yarn global add yalc

核心命令

  • yalc publish: 在包项目中发布到本机 yalc 仓库(不推送给消费者)
  • yalc push: 在包项目中将最新产物推送给所有已 yalc add 的消费者项目
  • yalc add <package>: 在消费者项目中从 yalc 仓库安装此包
  • yalc update: 在消费者项目中更新已安装的 yalc 包
  • yalc remove <package>: 在消费者项目中移除 yalc 包
  • 其他:yalc installations show(查看安装情况)、yalc check(检查状态)

提示:默认是"拷贝产物"模式,避免软链带来的解析/构建问题。若确需软链可用 yalc add <pkg> --link,但不推荐。


推荐工作流(单包)

  1. 在"包项目"(要被消费的库)中:

    bash 复制代码
    # 1) 构建(确保输出产物完整,如 dist/)
    npm run build
    
    # 2) 将打包产物发布到本机 yalc 仓库
    yalc publish
  2. 在"消费者项目"(业务应用)中:

    bash 复制代码
    # 3) 从本机 yalc 仓库安装
    yalc add <your-package-name>
    
    # 4) 安装依赖并启动
    npm i
    npm run dev
  3. 后续库代码改动:

    bash 复制代码
    # 在包项目中重新构建并推送
    npm run build
    yalc push
    
    # 在消费者项目中如果未自动刷新,可手动
    yalc update
  4. 完成后回归 npm 正式包:

    bash 复制代码
    # 在消费者项目中移除本地 yalc 包
    yalc remove <your-package-name>
    npm i <your-package-name>@latest

示例场景

1.本地组件库与业务项目并行开发

以组件库(如包名 @your/awesome-lib)为例:

  • 在库项目中:

    bash 复制代码
    npm run build
    yalc publish
  • 在业务项目中:

    bash 复制代码
    yalc add @your/awesome-lib
    npm i
    npm run dev
  • 库更新迭代:

    bash 复制代码
    npm run build && yalc push
    # 业务项目中(如需)
    yalc update
  • 踩坑提示:

    • reactreact-domantd 等放入库的 peerDependencies,避免消费者安装时出现重复实例。
    • 确保库的 package.jsonfiles 或打包产物(如 dist/)包含所有必需文件(样式、图片、类型声明等)。

2.Monorepo 多包联调(pnpm/yarn workspace)

  • 对"被消费的库包"使用 yalc publish / push 与"应用包" yalc add / update 的模式,而不是直接 workspace 软链,减少构建器/解析器差异带来的问题。

  • 库包脚本示例:

    json 复制代码
    {
      "scripts": {
        "build": "tsc -b",
        "dev:push": "npm run build && yalc push",
        "dev:pub": "npm run build && yalc publish"
      }
    }
  • 应用包脚本示例:

    json 复制代码
    {
      "scripts": {
        "yalc:add": "yalc add @your/awesome-lib",
        "yalc:update": "yalc update"
      }
    }

  • yalc: 拷贝打包产物,接近真实发包,减少"多实例 React/依赖解析异常"。
  • npm link: 软链源码,调试直观,但在复杂依赖/多构建器下容易出现不可预期的行为。

最佳实践与注意事项

  • 打包产物为准 :始终 npm run build 后再 yalc publish/push
  • peerDependencies :库将运行时单例依赖(如 React)放入 peerDependencies;消费者负责安装。
  • 忽略文件 :在库中检查 .npmignorefiles,避免发布缺文件(样式、图片、声明)。
  • .yalc 与 yalc.lock
    • .yalc/ 通常不提交;yalc.lock 可在短期联调分支提交以确保一致,避免污染长期分支。
  • CI/CD :不建议在 CI 中依赖 yalc。CI 用正式发包(私服/beta tag)或 npm pack 产物。
  • 回滚 :完成联调后尽快 yalc remove,切回正式 npm 版本。
  • 常见问题
    • 依赖冲突/重复 React:检查库的 peerDependencies 与消费者实际安装版本是否一致。
    • 更新不生效:确认库已 yalc push,应用执行 yalc update;必要时删 node_modules 重装。
    • TS 类型缺失:确保库产物包含 .d.tstypes/typings 指向正确。

常用命令速查

bash 复制代码
# 库项目
npm run build && yalc publish     # 首次发布到本机仓库
npm run build && yalc push        # 推送更新给所有消费者
yalc check                        # 检查状态
yalc installations show           # 查看哪些项目安装了本包

# 消费者项目
yalc add <package>
yalc update
yalc remove <package>

最小可用脚本示例

package.json

json 复制代码
{
  "scripts": {
    "build": "tsc -p tsconfig.build.json",
    "yalc:publish": "npm run build && yalc publish",
    "yalc:push": "npm run build && yalc push"
  },
  "peerDependencies": {
    "react": "^18",
    "react-dom": "^18"
  },
  "files": ["dist", "package.json", "README.md"]
}

应用 package.json

json 复制代码
{
  "scripts": {
    "yalc:add:lib": "yalc add @your/lib",
    "yalc:update": "yalc update"
  }
}

结语

技术简而不凡,创新生生不息。我是 嘟老板,咱们下期再会。

相关推荐
该用户已不存在18 分钟前
这几款Rust工具,开发体验直线上升
前端·后端·rust
前端雾辰29 分钟前
Uniapp APP 端实现 TCP Socket 通信(ZPL 打印实战)
前端
无羡仙35 分钟前
虚拟列表:怎么显示大量数据不卡
前端·react.js
云水边41 分钟前
前端网络性能优化
前端
用户51681661458411 小时前
[微前端 qiankun] 加载报错:Target container with #child-container not existed while devi
前端
东北南西1 小时前
设计模式-工厂模式
前端·设计模式
HANK1 小时前
ECharts高效实现复杂图表指南
前端·vue.js
入秋1 小时前
Linux服务器安装部署 Nginx、Redis、PostgreSQL、Docker
linux·前端
acocosum1 小时前
毫米波雷达基础知识学习报告
前端
程序员鱼皮1 小时前
这套 Java 监控系统太香了!我连夜给项目加上了
java·前端·ai·程序员·开发·软件开发