前言
这将是一个系列文章的开始,也是实现我开源项目的一次尝试,本系列将从O开始实现基于Node的游戏框架之旅
该项目名称为:pinecone
项目环境
- 系统:windows10
- Node:v16.14.2
- pnpm:8.2.0
项目结构主体介绍
项目将使用 tsup简介作为打包工具,使用 lerna作为项目管理工具,项目采用Monorepos模式进行开发
tsup简介
tsup是由esbuild提供支持的TypeScript打包库,支持开箱即用,极少配置
lerna简介
Lerna 是一个快速、现代的构建系统,用于管理和发布同一存储库中的多个 JavaScript/TypeScript 包,属于Monorepos,允许您在同一个存储库中开发多个包,这对于提高工作效率非常有用
项目架构
初始化整体项目
npx lerna init
pnpm i @types/node tsup typescript -D -w
使用-w
参数将包安装到项目全局,由于本项目使用pnpm进行包管理,所以删除package.json中的
"workspaces": ["packages/*"]
并创建pnpm-workspace.yaml文件
packages:
- "packages/*"
脚手架子项目初始化
cd packages
mkdir cli
npm init -y
pnpm i chalk commander
将项目名从cli
改成@pinecone/cli
使用第三方库介绍
chalk
终端字符串样式,该库用于在命令行中输出更优雅的文本
示例
import chalk from 'chalk';
console.log(chalk.blue('Hello world!'));
commander
该库Node命令行界面的完整解决方案
示例
const { program } = require('commander');
program
.option('--first')
.option('-s, --separator ');
program.parse();
const options = program.opts();
const limit = options.first ? 1 : undefined;
console.log(program.args[0].split(options.separator, limit));
项目配置
package.json
中配置"bin": {
"pinecone": "bin/index.js"
},
src/index.ts
文件#!/usr/bin/env node
import Package from "../package.json";
import chalk from "chalk";
import { Command } from "commander";
const program = new Command();
program
.name("Pinecone_CLI")
.description(Package.description)
.version(Package.version);
program.parse();
program
.command("init")
.description("init project")
.action((str, options) => {
console.log(chalk.green("脚手架搭建成功"));
});
在文件头部添加
#!/usr/bin/env node
是为了指定用nodejs作为解释器,执行当前文件。
在子项目根目录下创建
tsup.config.ts
文件import { defineConfig } from "tsup";
export default defineConfig({
entry: ["./src/index.ts"],
clean: true,
outDir: "bin",
format: ["iife"],
outExtension() {
return {
js: `.js`,
};
},
});
项目打包
package.json
中添加"scripts": {
"build": "tsup src/index.ts",
},
3. 将项目添加到npm
npm link
4.测试
小结
以上是这个游戏服务框架的基础的搭建
下一篇文章将实现核心库core
后记
希望大佬提出宝贵意见,谢谢👏