umi/father--build模块源码阅读

本文介绍了umi/father-build模块的源码阅读,主要关注father和father-build两个包,特别是father.js和build.ts。father.js是通过script命令调用,而build.ts在father模块的bin/father.js中被调用,用于处理Rollup打包。
摘要由CSDN通过智能技术生成

umi/father–build模块源码阅读

背景

​ 最近在做前端公共组件库的打包工具,B站上看到阿里大佬云谦做的一个关于前端组件库打包工具umi/father视频,于是拿来阅读,方便后期自己基于Rollup开发打包工具。

项目架构

​ 该项目同样是以lerna为monorepo架构的多包管理,共有2个包,father和father-build。father主要是处理组件库文档类,father-build是聚焦于利用rollup去打包library。本文重点关注father-build。

未命名文件

主要模块解析

father.js(father/packages/father/bin/father.js)

通过script命令 father build/doc调用

// 获取命令行执行参数json对象
const args = yParser(process.argv.slice(2));
// 参数中带有version时,打印版本号信息
if (args.v || args.version) {
   
  console.log(require('../package').version);
  // 检测.local是否存在,若存在,打印
  if (existsSync(join(__dirname, '../.local'))) {
   
    console.log(chalk.cyan('@local'));
  }
  // 正常退出进程
  process.exit(0);
}

// 进行退出时通知
const updater = require('update-notifier');
const pkg = require('../package.json');
updater({
    pkg }).notify({
    defer: true });
// 获取Node.js进程执行时的工作目录
const cwd = process.cwd();
async function doc(args) {
   
  // 处理文档内容,暂不做解析
}
// 根据father xxx命令对应操作
switch (args._[0]) {
   
  // XXX
  case 'build':
    build();
    break;
  // XXX
}
function build() {
   
  // 转换传入参数
  const buildArgs = stripEmptyKeys({
   
    esm: args.esm && {
    type: args.esm === true ? 'rollup' : args.esm },
    cjs: args.cjs && {
    type: args.cjs === true ? 'rollup' : args.cjs },
    umd: args.umd && {
    name: args.umd === true ? undefined : args.umd },
    file: args.file,
    target: args.target,
    entry: args._.slice(1),
  });
	// 如果有多个入口文件,则抛出异常, 退出进程
  if (buildArgs.file && buildArgs.entry && buildArgs.entry.length > 1) {
   
    signale.error(new Error(
      `Cannot specify file when have multiple entries (${
     buildArgs.entry.join(', ')})`
    ));
    process.exit(1);
  }
	// 引入father-build模块,并调用father-build中build函数
  require('father-build').default({
   
    cwd,
    watch: args.w || args.watch,
    buildArgs,
  }).catch(e => {
   
    // 有异常,打印异常,退出
    signale.error(e);
    process
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值