Vue3源码学习之路-实现构建流程

构建脚本文件

  • 创建文件scripts/dev.js
  • 创建scripts命令

package.json

 "scripts": {
    "dev": "node scripts/dev.js reactivity -f global"
  }

使用node执行scripts/dev.js脚本打包reactivity模块为global格式

dev.js编写

// 获取命令行携带的参数 node scripts/dev.js reactivity -f global
// minimist解析命令
const args = require('minimist')(process.argv.slice(2));
// 使用esbuild打包
const { build } = require('esbuild');
const { resolve } = require('path');

// 打包目标
const target = args._[0] || 'reactivity';
// 打包格式
const format = args.f || 'global';

// 解析package.json
const pkg = require(resolve(__dirname, `../packages/${target}/package.json`));

// 输出格式
// iife 立即执行函数: (function(){})()
// cjs node中的模块: module.exports
// esm 浏览器中的esModule模块: import
const outputFormat = format.startsWith('global')
  ? 'iife'
  : format === 'cjs'
  ? 'cjs'
  : 'esm';

// 输出目录
const outfile = resolve(__dirname, `../packages/${target}/dist/${target}.${format}.js`);

// 默认支持ts,不会校验ts写的对不对
build({
  // 打包入口
  entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
  // 输出文件
  outfile,
  // 所有包全部打包到一起
  bundle: true,
  // 需要sourcemap
  sourcemap: true,
  // 输出格式
  format: outputFormat,
  // 全局名字
  globalName: pkg.buildOptions?.name,
  // 平台
  platform: format === 'cjs' ? 'node' : 'browser',
  // 监控文件变化
  watch: {
    onRebuild(error) {
      if (!error) console.log('rebuild...');
    },
  },
}).then(() => {
  console.log('watching...');
});

构建

npm run dev
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值