开发一款属于自己的Node游戏服务框架之项目搭建

2023年 8月 21日 52.6k 0

前言

这将是一个系列文章的开始,也是实现我开源项目的一次尝试,本系列将从O开始实现基于Node的游戏框架之旅

该项目名称为:pinecone

项目环境

  • 系统:windows10
  • Node:v16.14.2
  • pnpm:8.2.0

项目结构主体介绍

项目将使用 tsup简介作为打包工具,使用 lerna作为项目管理工具,项目采用Monorepos模式进行开发

tsup简介

tsup是由esbuild提供支持的TypeScript打包库,支持开箱即用,极少配置

lerna简介

Lerna 是一个快速、现代的构建系统,用于管理和发布同一存储库中的多个 JavaScript/TypeScript 包,属于Monorepos,允许您在同一个存储库中开发多个包,这对于提高工作效率非常有用

项目架构

f365d662990bb9ce3cadba39b1dd30b.png

初始化整体项目

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",
    },
    
  • 打包
  • image.png
    3. 将项目添加到npm

    npm link
    

    4.测试

    image.png

    image.png

    小结

    以上是这个游戏服务框架的基础的搭建

    下一篇文章将实现核心库core

    后记

    希望大佬提出宝贵意见,谢谢👏

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论