挑战21天手写前端框架 day5 使用 esbuild 的极简脚手架

简介: 挑战21天手写前端框架 day5 使用 esbuild 的极简脚手架

image.png



阅读本文需要 4 分钟,编写本文耗时 1.5 小时



引入 typescript

在项目中使用 typescript 可以使用很多联想,还有对于函数调用出入参也有一个明显的提示作用,可以大大加快我们编写框架的速度,也能减少很多翻阅文档的时间。

pnpm i typescript -w -D
复制代码


使用 tsc 初始化项目

npx tsc --init
复制代码

将会自动生成一个 tsconfig.json 文件,我们会在后面需要的时候修改它。



引入 esbuild 编译 ts

使用 esbuild 编译我们的源码,讲 ts 文件转译为 js 文件,将 es6 语法转为 es5 的语法。构建工具现在流行的有很多种,使用 esbuild 的唯一一个原因就是它默认很快。

image.png

pnpm i esbuild -w -D
复制代码


修改构建命令,使得我们能够快捷的启动构建脚本。

package.json

"scripts": {
        "build": "pnpm -r --filter ./packages run build",
        "dev": "pnpm -r --filter ./packages --parallel run dev"
    },
复制代码


根目录下面这么编写的一样是当你执行 pnpm build 的时候,将会执行所有子包中的 build 脚本,这样我们就可以执行一次就构建全部的包。

packages/malita/package.json

"scripts": {
        "build": "pnpm esbuild src/** --bundle --outdir=lib",
        "dev": "pnpm build -- --watch"
    },
复制代码


子包中配置 build 脚本,来执行 esbuild 编译,将 src 目录下面的文件编译到 lib 文件中。

配置完成之后,尝试执行 pnpm build

➜  malita git:(master) ✗ pnpm build
> @ build /Users/congxiaochen/Documents/malita
> pnpm -r --filter ./packages run build
> malita@0.0.2 build /Users/congxiaochen/Documents/malita/packages/malita
> pnpm esbuild src/index.ts --bundle --outdir=lib
  lib/index.js  100b 
⚡ Done in 1ms
复制代码

可以看到构建只花了 1ms。



编写 dev 入口

packages/malita/bin/malita.js 中添加 dev command,这里昨天介绍过了,这里不做多余阐述了。

#!/usr/bin/env node
const {
    Command
} = require('commander');
const program = new Command();
// ...  略
program.command('dev').description('框架开发命令').action(function() {
    require('../lib/dev')
});
program.parse(process.argv);
复制代码


通过上面的命令我们完成了当用户执行 malita dev 的时候,会 require('../lib/dev'),我们只需要在 src/dev.ts 中编写我们需要的逻辑就可以了。

那么我们该在 dev 里面写什么呢?或者说 dev 服务的功能是什么呢?



极简的脚手架

回想一下第三天时候,我们做的尝试让一个页面运行起来。最后我们使用了 jsx 的语法,编写了 react 项目,并且成功的运行起来了。


所以我们先用我们新的目录结构,组织一下这个 demo。

新建 examples/app/src/index.tsx

import React from 'react';
import ReactDOM from 'react-dom';
const Hello = () => {
    const [text, setText] = React.useState('Hello Malita!');
    return (<span
        onClick={() => {
            setText('Hi!')
        }}> {text} </span>);
};
const root = ReactDOM.createRoot(document.getElementById('malita'));
root.render(React.createElement(Hello));
复制代码


新建 examples/app/www/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Malita</title>
</head>
<body>
    <div id="malita">
        <span>loading...</span>
    </div>
    <script src="./index.js">
    </script>
</body>
</html>
复制代码


配置执行脚本 scripts

"scripts": {
        "build": "pnpm esbuild src/** --bundle --outdir=www",
        "dev": "pnpm build -- --watch"
    },
复制代码


执行编译 pnpm build,然后浏览器中打开 www/index.html 就能看到我们的页面了。 如果执行 pnpm dev,每一次更新代码之后,只要刷新页面就可以看到最新的内容了。


直到现在,我们都是通过在浏览器中打开 html 的方法,访问我们的页面,如果你想通过类似 http://127.0.0.1:3000/ 的方式访问页面。


那可以使用 serve 命令,这个在后面验证产物是否构建成功的时候,是一个很有帮助的服务。

// cd examples/app
pnpm i serve --D
复制代码


配置执行脚本 scripts

"scripts": {
        "build": "pnpm esbuild src/** --bundle --outdir=www",
        "dev": "pnpm build -- --watch",
        "serve": "cd www && serve --port=8000"
    },
复制代码


执行 pnpm serve 就可以 http://127.0.0.1:3000/ 了。

image.png



总结

通过上面的极简脚手架,我们就能分析出我们的极简框架的第一个需求了,

执行 malita dev 提供一个可访链接能访问当前页面。

我们会在明天完成这个需求。


感谢阅读,如果你有任何问题,可以通过评论区和我互动。新人创作者,需要各位大哥点赞评论支持。谢谢。


源码归档

目录
相关文章
|
4月前
|
资源调度 前端开发 JavaScript
前端研发链路之脚手架
本文首发于微信公众号“前端徐徐”。文章介绍了前端开发中脚手架工具的重要性及其工作原理。脚手架工具能够大幅提升开发效率,确保代码质量和项目一致性。文章详细探讨了脚手架的历史、工作原理、常见工具及其优势与潜在问题,并展望了其未来发展方向,帮助开发者更好地理解和应用脚手架工具。
99 4
前端研发链路之脚手架
|
5月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
6月前
|
JavaScript 前端开发
什么是前端构建工具?vite和vite脚手架的关系!
【8月更文挑战第1天】前端构建工具简析
108 4
|
9月前
|
资源调度 JavaScript 前端开发
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
【前端开发---Vue2】史上最详细的Vue入门教程(六) --- 工程化开发和脚手架、组件注册
|
9月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
从脚手架开始学前端 【第3期】Node.js环境搭建(CentOS 7)
144 0
|
9月前
|
Web App开发 JavaScript 前端开发
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
从脚手架开始学前端 【第2期】Node.js环境搭建(windows)
117 0
|
9月前
|
前端开发 测试技术
前端反卷计划-脚手架-从0实现一个脚手架
前端反卷计划-脚手架-从0实现一个脚手架
|
9月前
|
JavaScript 前端开发 jenkins
前端反卷计划-脚手架-原理介绍
前端反卷计划-脚手架-原理介绍
|
JavaScript 前端开发 Java
【前端】Vue2 脚手架模块化开发 -快速入门
1.搭建 Vue 脚手架工程,需要使用到 NPM(node package manager), npm 是随 nodejs 安装 的一款包管理工具 , 类似 Maven 。所以我们需要先安装 Nodejs 2. 为了 更好兼容 ,这里我们安装 node.js10.16.3 , 要求同学们也使用这个版本 ( 因为这里 只是演示 Vue 脚手架工程 ), 后面我们还会讲解 Vue3 的脚手架工程搭建 , 再对 Node 升级 .
|
JSON 前端开发 JavaScript
从零打造你的前端开发脚手架
从零打造你的前端开发脚手架
250 0

热门文章

最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    详解智能编码在前端研发的创新应用
  • 5
    巧用通义灵码,提升前端研发效率
  • 6
    智能编码在前端研发的创新应用
  • 7
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 8
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 9
    抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
  • 10
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
  • 1
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    29
  • 2
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    51
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 4
    巧用通义灵码,提升前端研发效率
    93
  • 5
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    141
  • 6
    详解智能编码在前端研发的创新应用
    96
  • 7
    智能编码在前端研发的创新应用
    83
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121
  • 10
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    75