写在前面
相信已经有不少小伙伴们已经实现了自己cli
工具的gen
命令了。
接下来我们来讲讲如何实现一个dev
命令,并通过dev
命令来启动项目。
准备工作
有了前面几篇的铺垫,到这里相信同学们已经知道接下来我要做什么了。
我们回到src/index.ts
,写下
1 | program.command('dev').description('Run varlet development environment').action(dev) |
用来接收一个dev
命令,而具体要做的处理,我们一样放在src/commands/dev
中,对外暴露一个dev
方法。
dev要做的事
我们先手动将运行环境切换为dev
1 | process.env.NODE_ENV = 'development' |
然后我们需要确保输入名称的地方存在项目文件
1 | const SRC_DIR = resolve(process.cwd(), 'src') |
当完成以上工作后,就可以启动项目了。
startServer
我们用一个startServer
函数来处理启动的业务逻辑。
1 | let server |
到这里,我们就可以将服务启动起来了。
我们访问一下http://localhost:3000/
肯定会有同学们疑惑了,我服务不是起来了吗,怎么访问不到呢?
其实啊很简单,因为我们没有进行站点的构建,所以没法访问对应的站点资源。
举个例子,我们在cli
创建的的项目根目录,新建一个index.html
,然后看看浏览器这边是不是就可以正常显示了呢。
既然知道了这个问题,那我们接下来就来完成站点的构建。
站点构建
我们定义一个buildSiteEntry
函数用于处理站点构建。
从varlet-cli
的源码中,我们可以看出buildSiteEntry
一共做了三件事
1 构建移动端站点的路由
2 构建pc端站点的路由
3 生成站点资源
本文我们以1
为例进行剖析,对2
感兴趣的小伙伴们可以访问我们的代码仓库进行查看。
从图中我们可以分析出来,我们需要将每个组件下example
的index.vue
作为页面,添加到路由中。
1 | // 获取src目录下的文件 |
从上面我们拿到了所有的页面地址,接下来就是填充route
。
1 | const routes = examplePaths.map( |
至此我们就完成了路由的动态创建,接下来就是文件写入了。
我们创建一个outputFileSyncOnChange
用于处理问文件写入
1 | const outputFileSyncOnChange = (path: string, code: string) => { |
接下来 我们调用outputFileSyncOnChange
函数,将路由写入到文件中。
1 | outputFileSyncOnChange(resolve(process.cwd(), '.varlet/mobile.routes.ts'), source) |
接下来就是站点文件的生成。
我们将site
文件夹(存放的站点文件)拷贝到当前运行的目录下。
1 | copy(resolve(__dirname, '../../site'), resolve(process.cwd(), '.varlet/site')) |
接下来,我们添加一些vite
的配置
1 | const inlineConfig = { |
然后我们通过you-cli-name dev
重新跑一遍。
这不就跑起来了嘛~
最后
以上就是dev
命令的相关内容了,跟varlet-cli
的dev
相比有一些删减。
更详细的内容请移步我们的代码仓库,欢迎star && pr