我终于设法完成了我的第一篇文章 dev.to
在第一次尝试交付我失败的东西时
这次我设法使范围关闭,我相信,繁殖是非常幻想的。
入口,足够的语音(或写作...),让我们开始。
¡
我们不会在这里创造任何革命性的或太复杂的东西,已经目的是说明如何验证应用程序上升的必要方差。
对于本教程,我们需要在母亲中安装的Node.js
。我还将使用git
来处理山雀。亲爱的读者,我将从一开始就开始参加这些借口。
我将MacOS用作操作系统,我将使用终端执行所有命令。如果您使用的是Windows,建议您使用WSL。
我也将yarn
用作npm
Invents的软件包经理。
我们将在这个项目中使用
- 打字稿
- 快速
- dotenv
- zod
- TSX
- tsup
一个细节:我正在使用fastify
,因为我将在此处使用此微型框架发布更多材料。但是我要在这里应用的内容与express
或更多的跟踪框架(例如NestJS
)完全兼容。
〜开始项目
让我们从创建一个新的env-validate
开始。
打开终端并运行命令:
mkdir env-validate && \
cd env-validate
现在,让我们从命令开始一个节点项目:
yarn init -y
已经为git中的委员会做准备,不要上升koud8和.env
,让我们在项目的根部创建一个.gitignore
文件:
touch .gitignore && \
echo '.env' >> .gitignore && \
echo 'node_modules' >> .gitignore
让我们首先承诺将来促进历史版本的导航。
git add . && \
git commit -m "initial commit"
â开始快速开始和打字稿
让我们使用Koud4与GET /hello
路线启动服务器,以便在此处拥有代码的母亲。
为此,我们将安装koud4:
yarn add fastify
因为我们将使用打字稿,我们将需要已安装的从业者 typecript 。
我们还需要安装节点(@type/node ),.ts
( tsx )文件的解释器和javascript的打字稿编译器( tsup )。
yarn add -D typescript @types/node tsx tsup
安装了打字稿,让我们从命令开始启动koud15:
yarn tsc --init
对于本教程,我们将不需要修改此文件中的任何内容
现在,让我们生成koud16文件,fastify
配置为:
mkdir -p src/infra && \
touch src/infra/app.ts
在生成的koud16文件中粘贴以下包含:
import fastify, { FastifyReply, FastifyRequest } from "fastify";
const app = fastify()
app.get('/hello', (request: FastifyRequest, reply: FastifyReply) => {
return reply.status(200).send({ message: 'hello world' })
})
export { app }
这个文件的方式我们创建了一个常数app
,它是fastify
函数的实例。
使用此差异app
,我们创建了一个GET /hello
路线,该路由将返回具有200的“ Hello World”消息。
现在让我们生成koud23文件,这是我们从应用程序中的入口点
touch src/infra/server.ts
粘贴以下在server.ts
文件中的包含:
import { app } from "./app";
async function bootstrap() {
await app.listen({ host: '0.0.0.0', port: 3333 })
console.log('🚀 server started at port 3333')
}
bootstrap()
解释... p>
在这里,我们有一个Koud25 Asancrona函数,该功能创建了来自第一行中导入的变体“应用程序”的Koud4服务器。
该服务器在http://localhost:3333
但是要使该服务器工作,我们需要将脚本插入Koud28文件。
打开此文件并输入新的scripts
键:
"scripts": {
"start:dev": "tsx watch src/infra/server.ts"
}
爬上服务器,只是在终端运行命令:
yarn start:dev
我们期望在终端看到的是以下消息:
一旦服务器从服务器的优美起始消息发送到浏览器,请转到地址:http://localhost:3333/hello
如果一切都正确,这是您应该在浏览器中看到的消息
要看到这样的格式化消息,我正在使用 dark in Chrome
中的JSON Viewer
扩展
新的任务要完成此块
git add . && \
git commit -m "fastify server started"
•验证环境的变体
如果您仍然在终端运行服务器,请使用CTRL + C
结束该过程或打开一个新的选项卡/窗口。
现在,让我们生成一个.env
文件,在其中我们将列出应用程序启动需要的环境。
touch .env
粘贴以下生成的koud9文件中的包含:
# API_PORT=3333
要验证环境有所不同,让我们使用 验证库,我们还需要安装 dotenv 库。这是最后一个允许我们通过将环境导入到env.ts
文件的印度。
执行不终端:
yarn add zod dotenv
要创建env.ts
文件,请执行:
touch src/infra/env.ts
在生成的文件中粘贴以下包含的内容:
import 'dotenv/config'
import { z } from 'zod'
const envSchema = z.object({
API_PORT: z.coerce.number()
})
const getEnv = envSchema.safeParse(process.env)
if (!getEnv.success) {
const errorMessage = 'load environment failed'
console.error(errorMessage, getEnv.error.format())
throw new Error(errorMessage)
}
export const env = getEnv.data
让我们传递粘合的内容:
首先,我们导入了koud37来读取koud9文件。接下来,我们从koud39 o z 。
导入 zod与parano仪表一起使用,在这里我们使用koud40来生成具有应用程序必要差异的schema
。
在这种情况下,我们声明API_PORT
属性为z.coerce.number()
。
从.env
文件的环境差异导入的所有内容都解释为文本。使用Koud46之前使用的coerce
一词是告诉zod
对number
格式进行的对话( string )的一种方式。
接下来,我们创建了一个差异getEnv
,我们通过了koud50
koud51 valiala命令如果koud52通过的内容符合koud41中指定的内容。
结果,getEnv
的变化将具有.success
布尔属性。
下面我们正在检查此.success
是否失败,如果失败,我们用错误koud57中断了脚本。
如果验证通过了,也就是说,如果Koud55为True,我们将带有从koud60
获得的数据导出差异env
是测试的时间:
返回到server.ts
文件,然后更改port
属性以读取前一步中导出的env.API_PORT
。
server.ts
文件将像这样
import { app } from "./app";
import { env } from "./env";
async function bootstrap() {
await app.listen({ host: '0.0.0.0', port: env.API_PORT })
console.log(`🚀 server started at port ${env.API_PORT}`)
}
bootstrap()
我利用了优势并修改了控制台消息,以便在终端显示变量中传递的门。
现在让我们运行应用程序以查看发生的情况:
yarn start:dev
e ... eitaiaaa,erro!
平静,预计:)
您可以在终端中看到,我们在执行的顶部有以下错误消息:
此消息在这里,因为我们创建了带有变量API_PORT
的koud9文件。
要解决此问题,请停止使用Koud32执行服务器,然后返回Koud9文件并删除第一行#。
您的.env.
文件应该是这样的:
API_PORT=3333
再次运行应用程序,现在一切都应该工作
yarn start:dev
预期的是,您看到了带有消息的终端:
我确定(会吗?)一切顺利。
我们将创建一个新的.env.example
文件,以便通过克隆此重新定位,可以启动该项目,只是重命名为koud9
cp .env .env.example
e,到最后一个,让我们弥补整个过程,然后去最后一部分。
git add . && \
git commit -m "environment variables validated"
生成项目构建
要完成本教程,让我们设置将执行javascript末端的build da aplicação
和koud73的脚本。
为此,来到package.json
文件,然后添加下面的脚本:
"scripts": {
...
"prebuild": "tsc --noEmit",
"build": "tsup src --out-dir build",
"start": "node build/server.js"
}
再次解释...
koud75脚本使用koud76库将打字稿cadigos直接使用koud75作为saãda。
。 por,在执行transpile之前,会自动调用prebuild
,以便仅由于成员而进行thexcript进行跨速度。如果某事失败,则在此阶段中断构建。
如果什么都没有失败,Koud75董事会将带有JavaScript文件,node.js将能够本身执行。
koud73脚本已经使用编译文件执行服务器。
这是如果发布此应用程序,将使用的命令。
要测试所有内容,只需在终端运行:
yarn build
您应该看到类似的东西:
现在只运行:
yarn start
并在您的终端上查看...
Pplos沙龙稳固的stuyk它做圆润的玩具吗?git add . && \
git commit -m "app build added"
ufaaa ...
因此结束了我的第一个教程。
该应用程序的任何和所有必要的环境差异都可以在env.ts
文件中生成的模式中列出。
因此,如果未在将发布该应用程序的环境中声明其中任何一个。
例如:数据库,AWS或任何其他提供商,JWT代币的变量以及Aãwill。
只需在模式中添加您需要的内容,并保证将在没有任何一个的情况下启动应用程序。
我希望您喜欢它。
访问github的clique aqui
的项目存储库在下一个;)