05. Setup project
Let’s setup project
สร้าง Hono project
pnpm create hono@latestแล้วก็เลือกตอบคำถามไปตามนี้
? Target directory .? Which template do you want to use? nodejs? Do you want to install project dependencies? yes? Which package manager do you want to use? pnpmSetup ESLint
Install
pnpm dlx @antfu/eslint-config@latestpnpm add -D eslint-plugin-perfectionisteslint.config.js
import antfu from "@antfu/eslint-config"import perfectionist from "eslint-plugin-perfectionist"
export default antfu( { typescript: true, stylistic: { indent: 2, quotes: "double", }, }, { plugins: [ perfectionist.configs["recommended-alphabetical"], ], rules: { "no-console": "warn", "perfectionist/sort-objects": "error", "unicorn/throw-new-error": "off", "unused-imports/no-unused-imports": "error", }, }, { rules: { "ts/consistent-type-definitions": "off", }, },)Add lint script
package.json
pnpm pkg set \'scripts.lint:fix=eslint --fix .' \'scripts.lint=eslint .'Set build script
เนื่องจากว่า Hono ไม่ได้ใส่ build script มาให้ เราก็เลยต้องมาทำเอง
ที่ Hono ไม่ได้ใส่มาให้ก็เพราะว่า Hono สามารถ เอาไป run ได้หลายที่ เขาก็ไม่รู้ว่าเราจะเอา app ไป run ที่ไหน
ในที่นี้ืเราจะเอา app ไป run บน Nodejs
install typescript
pnpm add -D typescriptconfig tsconfig.json
tsconfig.json
{ "compilerOptions": { "outDir": "./dist", "target": "ESNext", "module": "NodeNext", "strict": true, "verbatimModuleSyntax": true, "skipLibCheck": true, "types": [ "node" ], "jsx": "react-jsx", "jsxImportSource": "hono/jsx", }, "exclude": [ "node_modules" ]}config package.json script
package.json
pnpm pkg set \'scripts.build=tsc'"scripts": { "dev": "tsx watch src/index.ts", "build": "tsc"},add folder dist to .gitignore
.gitignore
# dev.yarn/!.yarn/releases.vscode/*!.vscode/launch.json!.vscode/*.code-snippets.idea/workspace.xml.idea/usage.statistics.xml.idea/shelf
# depsnode_modules/
# env.env.env.production
# logslogs/*.lognpm-debug.log*yarn-debug.log*yarn-error.log*pnpm-debug.log*lerna-debug.log*
# misc.DS_Store
dist db-data disttype-safe process.env
global.d.ts
interface Env { NODE_ENV: "development" | "production" | "test" | "uat"}
declare global { namespace NodeJS { interface ProcessEnv extends Env {} }}
export { };export type IEnv = Env;setup dotenv
install
pnpm add @dotenvx/dotenvxconfig
index.ts
import { config } from "@dotenvx/dotenvx" config()
const app = new Hono()