手动搭建koa+ts项目框架(基础篇)

文章目录

  • 前言
  • 一、TS配置文件
    • 1、全局安装TypeScript
    • 2、项目根目录创建Typescript配置文件
  • 二、项目初始化配置文件(package.json)
    • 1、初始化配置文件
    • 2、安装依赖
  • 三、开启简单的服务API
    • 入口文件
    • 新增脚本
  • 总结
    • `如有启发,可点赞收藏哟~`


前言

为什么要使用Node.js+TypeScript

  • TypeScript是一个JavaScript超集。它集成了JavaScript特性,并具有静态类型和类型检查等补充特性。
  • Node.js是非常流行的JavaScript框架。Node.js有一个强大的NPM(Node Package Manager)生态系统,提供开源代码(包),你可以在你的任何Node.js项目中使用。
  • Node.js非常适合制作服务器端应用程序,但它缺乏一些现代组件,如类型检查。Node.js的代码库也可能非常难以维护。
  • Typescript支持现代编码风格,如静态类型和类型检查。它是为构建广泛和高水平的应用程序而制作的。
  • 这使得你可以用强大的类型检查来编写基于服务器端的应用程序,这使得你可以避免运行时的类型错误和其他Typescript的优势,并充分利用Node.js的优势。

一、TS配置文件

1、全局安装TypeScript

安装typescript到全局

npm i typescript -g

查看安装版本

tsc --version

在这里插入图片描述

2、项目根目录创建Typescript配置文件

  • 新建./src/indexts文件
  • 初始化tsconfig.json文件
tsc --init
  • 根据实际需要修改配置文件

例如
rootDir:“/src”指定项目编译入口,实际指定./src/index.ts文件
outDir: "./dist"指定输出文件夹为dist
compilerOptions(编译器选项)同级新增exclude(排除)配置如下

{"compilerOptions": {..."module": "commonjs",                                /* Specify what module code is generated. */"rootDir": "./src",                                  /* Specify the root folder within your source files. */"moduleResolution": "node10",                     	 /* Specify how TypeScript looks up a file from a given module specifier. */"outDir": "./dist",                                  /* Specify an output folder for all emitted files. */},"include": ["src/**/**.ts",],"exclude":["./node_modules"]
}

在这里插入图片描述

二、项目初始化配置文件(package.json)

1、初始化配置文件

项目根目录执行命令npm init
在这里插入图片描述

2、安装依赖

koa框架

npm i koa -S
and
npm i @types/koa -D // 支持TS

使用es6的import导入模版

如果项目使用require需要安装@types/node让项目支持require导入模块

npm i @types/node -S

require与import的区别

  • 1、require是CommonJS规范的模块化语法,import是ECMAScript 6规范的模块化语法;
  • 2、require是运行时加载,import是编译时加载;
  • 3、require可以写在代码的任意位置,import只能写在文件的最顶端且不可在条件语句或函数作用域中使用;

在这里插入图片描述

三、开启简单的服务API

入口文件

/src/index.ts文件

import Koa from "koa";const app = module.exports = new Koa();app.use(async function (ctx: Koa.Context) {ctx.body = 'Hello World';
});
if (!module.parent) app.listen(3000);

新增脚本

  • package.json
    新增build脚本(先使用tsc转译TSJS,然后使用node命令开启编译后的js文件)
{..."scripts": {"build": "tsc && node ./dist/index.js",...},...
}
  • 执行npm run build
    在这里插入图片描述
  • 可看到成功生成dist文件
    在这里插入图片描述
  • 打开浏览器访问localhost:3000
    在这里插入图片描述

总结

按照上述步骤操作,即可开启TS+Koa项目啦~

如有启发,可点赞收藏哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267981.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C51单片机中reentrant关键字的使用,关于MULTIPLE CALL TO FUNCTION警告的问题

关于可重入关键字reentrant的使用: 现象: 在一个项目中警告信息如下,提示该函数多次调用,因为该函数在串口中断和主循环中都有被调用。 影响: 如果在使用该函数期间被中断打断,而中断也调用了该函数&a…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章:https://arxiv.org/abs/2305.18980 代码:https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的…

u盘格式化和快速格式化的区别是什么?为您揭晓答案

在日常使用中,我们经常遇到U盘无法正常读取或存储数据的情况。这时候,格式化U盘成为一种常见的解决方法。然而,在格式化U盘时,我们面临两种选择:普通格式化和快速格式化。这两种格式化方式有什么区别?我们又…

如何用CHAT帮你提高工作效率?

问CHAT:从规范项目管理流程交付,分别对项目信息安全管理,项目预算管理和项目采购管理三个方面提建议 CHAT回复: 项目信息安全管理: 1. 制定详细的信息安全政策,所有参与项目的员工必须遵守,对其中涉及敏感…

Python从门到精通(九):matploblib图形库

Matplotlib 是一个数字绘图库,可以绘制多种图形 绘制图形 曲线图 import matplotlib.pyplot as pltclass PltDemo:def __init__(self) -> None:# 数据self.squares [1, 4, 9, 16, 25]def init_ax(self):# flg:由生成的一系列绘图构建成的整体个图…

3_流量预测综述阅读_Cellular traffic prediction with machine learning: A survey

为了方便学习英语书写,总结的一些话用英语书写 ♥目录♥ 0、文献来源and摘要1、introduction2、prediction problems and datasets2.1 prediction problems2.2 dataset(1)Telecom Italia 意大利电信 2015(2)City Cell…

【论文精读】GAIA: A Benchmark for General AI Assistants

GAIA: A Benchmark for General AI Assistants 前言Abstract1 Introduction2 Related work3 GAIA3.1 A convenient yet challenging benchmark for general AI assistants3.2 Evaluation3.3 Composition of GAIA3.4 Building and extending GAIA 4 LLMs results on GAIA5 Discu…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述:解题思路一:可以将链表转为数组,然后从后往前遍历,遇到大于等于当前元素的就入栈,最终栈里面的元素即是最终的答案。解题思路二:递归&am…

【sqli靶场】第二关和第三关通关思路

目录 前言 一、sqli靶场第二关 1.1 判断注入类型 1.2 判断数据表中的列数 1.3 使用union联合查询 1.4 使用group_concat()函数 1.5 爆出users表中的列名 1.6 爆出users表中的数据 二、sqli靶场第三关 2.1 判断注入类型 2.2 观察报错 2.3 判断数据表中的列数 2.4 使用union联合…

项目播报 | 河北信投数字科技签约璞华科技,以数字化方式全面提升采购效率

近日,璞华科技签约河北信投数字科技有限责任公司(以下简称“河北信投数字科技”)。璞华科技基于璞华采云链产品帮助客户打造采购数字化全景解决方案,实现智慧采购数字化转型升级。 本次强强联合,双方就采购数字化平台建…

企业微信模板卡片消息

投票选择型和多项选择型卡片仅企业微信3.1.12及以上版本支持 文本通知型、图文展示型和按钮交互型三种卡片仅企业微信3.1.6及以上版本支持(但附件下载功能仍需更新至3.1.12) 微工作台(原企业号)不支持展示模板卡片消息 文本通知型…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似,枚举的定义有两种方式。区别是结构体必须以“F”开头命名,而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下,注意这个定义的代码一定要在“UCLASS()”…