Comments (10)
ขอบคุณที่เสนอแนวทางครับ เห็นด้วยว่าถ้ามี structure ดีๆ จะทำให้ต่อยอดได้ง่ายขึ้น
ความเห็นส่วนตัว — เคยใช้ Nest.js มาในปี 2020 ถึง 2022 แล้วส่วนตัวไม่ค่อยชอบเลยครับ เพราะว่า:
-
มันใช้
import
syntax แต่ไม่ยอมซัพพอร์ต native ES modules ซะที เวลาimport
กลับเจอERR_REQUIRE_ESM
แล้วก็ไม่มีแพลนด้วยว่าจะซัพพอร์ตเมื่อไหร่ — nestjs/nest#11046 -
มันใช้ decorator syntax แบบที่เป็น experimental/legacy อยู่ และไม่ตรงกับมาตรฐาน TC39 — nestjs/nest#9558
-
ปัจจุบัน การ build/compile/test ที่เร็ว มักจะใช้ swc หรือ esbuild ซึ่ง Nest.js ก็ยังไม่มี first class support ใน Nest.js ซะที — nestjs/nest-cli#731
-
เรื่องการเทสต์ Nest.js ยังใช้ Jest เป็นตัวหลักอยู่ ซึ่งในโปรเจคที่ใหญ่ขึ้นมันทำงานค่อนข้างช้า เมื่อเทียบกับ https://vitest.dev/
-
ปัจจุบันคะแนนนิยมของ Nest.js เริ่มหายไป โพล State of JS 2022 ไม่พูดถึง Nest.js แล้ว
โดยรวมรู้สึกว่า JavaScript/TypeScript ecosystem มันพัฒนาจากปี 2020 มาค่อนข้างไกล แต่ Nest.js กลับไม่พัฒนาตาม ถ้าใช้ Nest.js ก็มีโอกาสที่ทำให้ติดแหง็กกับ ecosystem ยุค 2020 หรือไม่ก็ต้องไปใช้พวก 3rd party package ที่ไม่ได้ first-class support โดยทีม Nest และอาจจะพังเมื่อไหร่ก็ได้ จึงไม่ค่อยสนับสนุนเท่าไหร่ครับ ;-;
อีกตัวที่พูดถึงคือ discordx ซึ่งใช้ decorators syntax เหมือนกัน ปัญหาของ decorators syntax คือมันยังไม่เป็น standard ทำให้พวก build tooling เช่น esbuild ไม่ซัพพอร์ตครับ1 มองว่ามีวิธีอื่นๆ ที่จะทำให้โค้ดเป็นระเบียบโดยไม่ต้องใช้ decorators (ดูตัวอย่างได้จากพวก meta-framework เช่น Next.js, Remix, Astro)
p.s. ความเข้าใจของผมอาจจะคลาดเคลื่อนนะครับ ถ้าผิดตรงไหนแย้งได้ผมจะได้เรียนรู้ด้วย
Footnotes
-
ยกเว้นว่าจะใช้ esbuild-plugin-tsc ซึ่งใช้ tsc ในการคอมไพล์ อาจจะทำให้คอมไพล์ช้า และ esbuild-kit ไม่ซัพพอร์ตการโหลดปลั๊กอินเพิ่ม ↩
from kaogeek-discord-bot.
@mildronize @saenyakorn ตอบสองท่านเลยครับ
เท่าที่ผมดูในยุค modern JavaScript ไม่ค่อยเห็น pure backend framework แล้ว ผมเห็นด้วย แต่เหตุผลสำหรับผมต่างกันครับ:
-
ยุคนี้มักจะมาเป็น Full stack framework เช่น Next.js, Astro, Remix แทน ทำให้ไม่ต้องแบ่งแยก Frontend/Backend อีกต่อไป โดยเฉพาะหลายๆ เจ้าที่เริ่มเอาคอนเซปต์ Filesystem-based routing มาใช้. ลองดู Theo Browne (2022). “Next.js is a backend framework.” ครับ (ปัจจุบันถ้าผมจะขึ้น Backend ผมคงขึ้นด้วย Next.js ถึงจะไม่ได้ใช้ส่วน Frontend เลยก็ตาม หรือไม่ ก็ Fastify ครับ)
-
Modern JavaScript เดี๋ยวนี้มัน modern พอที่จะจัดโค้ดให้เป็นระเบียบโดยไม่ต้องพึ่ง framework แล้วครับ แถม TypeScript มันมี code actions และยังซัพพอร์ต Evolutionary architecture ได้ดีกว่าการมี Framework มากำกับแล้วทำให้ขยับ Architecture ทีหลังยาก
-
จริงๆ เครื่องมือฝั่ง Backend ในโลก Node ก็ยังมีอยู่เหมือนกันครับ แต่จะไม่ได้แบบครอบทั้งแอพอีกต่อไป แต่จะครอบแค่บางส่วนของตัวระบบ เช่น tRPC กับ Prisma
-
“Framework ที่น่าจะดีเป็นอันดับต้น ๆ ในโลกของ Nodejs น่าจะยังเป็น NestJs อยู่” เรื่องนี้ผมไม่เห็นด้วย เพราะถ้าเป็นแบบนั้น ควรจะยังคงมีชื่อ Nest.js อยู่ State of JS 2022 และ StackOverflow Developer Survey 2022 แต่ของปีล่าสุดไม่พูดถึง Nest.js เลยครับ
Disclaimer: เรื่อง Nest.js อย่าเชื่อความเห็นผมมาก ผมคิดว่าผมน่าจะ bias มากๆ เพราะผมหัวเสียกับมันมาพอสมควรครับ ผมเคยเปิด Issue เรื่อง ESM ตั้งแต่ปี 2021 มาปี 2023 แล้วก็ยังไม่มีอัพเดตอะไรเลย ผมเลยเลิกหวังกับคำว่า “ถ้าวันหนึ่ง” กับ Nest.js แล้วครับบ 😂
วันคุยกับ @heypoom ที่เป็น VP of Engineering เขาบอกว่า หลายๆ คนจะชอบ Nest.js ถ้าในทีมไม่มีคนที่มาคอยช่วย Evolve architecture ก็ให้ Nest.js มาทำหน้าที่เป็น Architect ให้แทน ถึง dev Node.js หลายๆ คนอาจจะไม่ชอบ แต่อย่างน้่อยก็ดูมีทิศทาง แต่เท่าที่สังเกตจากคนที่มา Contribute มีหลายคนที่มี Sense of architecture มาช่วยปรับ Architecture อยู่เรื่อยๆ เรื่องนี้ผมเลยหายห่วงครับ ตัวอย่าง PR ที่เข้ามาก็เช่น
เลยอยากเชียร์ให้ลองไปแบบไม่ต้องใช่้ Framework ไปก่อนครับ แล้วดูว่ามันมีปัญหาเรื่อง Architecture เยอะไหม
ผมเคย Deal กับโค้ดเบส Node.js ที่เละๆ มาเหมือนกันครับบ ซึ่งผม agree ว่าเทียบกับ maintain codebase เละๆ แบบนั้น สู้ maintain Nest.js codebase ดีกว่า 55555
ส่วนตัวมองว่าถ้า codebase เริ่มหลงทาง ก็น่าจะ migrate ไป Nest.js ได้นะครับ ส่วนตัวไม่ติดอะไร คิดว่า dev หลายๆ คนก็น่าจะอยู่กับมันได้เช่นกัน (แค่ส่วนตัวความสนุกของการเขียนโค้ดมันจะลดลงไปหน่อย)
from kaogeek-discord-bot.
อันนี้แค่ FYI เฉย ๆ นะครับ อันนี้เป็น discord bot ที่ผมเขียนไว้เมื่อนานมาแล้ว ด้วย discord-nestjs ชื่อ paradis-bot เผื่อเอาไว้เป็นข้อมูลประกอบการตัดสินใจของหลาย ๆ คน ตัวอย่าง command เช่น ping command
ส่วนเหตุผลที่คุณ @dtinth ยกมาอันนี้อาจจะเห็นต่างนิดนึงเรื่องการใช้ Full stack framework เช่น NextJS, หรือ Remix มาใช้เฉพาะส่วน backend อย่างเดียว ส่วนตัวรู้สึกว่าเหมือนเราหยิบของที่ทรงพลังมากแต่ใช้งานมันนิดเดียวทำให้รู้สึกว่าเหมือนใช้งานมันได้ไม่เต็มที่เท่าไร (ซึ่งอันนี้ผมอาจจะ bias เองก็ได้ lol)
ถ้าอย่างงั้นเราไป way maintain architecture เองไปก่อนแล้วถ้า codebase มีปัญหายังไง อาจจะค่อยหยิบเรื่องนี้มาคุยกันอีกทีละกันนะครับ
หรือ dev ท่านอื่น ๆ มีความเห็นว่าอย่างไรบ้างครับ?
from kaogeek-discord-bot.
The another option is https://discordx.js.org/ which has many useful decorators.
from kaogeek-discord-bot.
Oh yes, I've been looking into discord-nest too. Might consider moving to use the framework kubb 👍
from kaogeek-discord-bot.
I could setup the framework in an hour if you all agreed
from kaogeek-discord-bot.
The another option is https://discordx.js.org/ which has many useful decorators.
Just have a quick look in this package. I don't see any test script in this one, so I'm not quite sure if we could know if there is any breaking changes that will affect this project in the future e.g. changes from Discord API itself or changes from this library 🥺.
BTW, I agree about having structure for this project which I guess it would come along after couple of features are implemented since code always evolved.
from kaogeek-discord-bot.
@dtinth สอบถามหน่อยครับ ถ้าไม่ใช่ Nest.js มี Alternative ที่น่าสนใจตัวอื่นๆ มั้ยครับ โดยส่วนตัวแอบไม่ชอบ Nest.js หลายอย่างเหมือนกัน
from kaogeek-discord-bot.
ขอบคุณคุณ @dtinth ด้วยนะครับสำหรับข้อมูลและ insights
- เห็นด้วยเรื่องที่ Nestjs หลายอย่างยังยึดติดกับ syntax เก่าอยู่ครับ ซึ่งอันนี้เป็นเรื่องที่ช่วยไม่ได้จริง ๆ สำหรับ framework ตัวนี้
- ในส่วนของการ build / compile ตอนนี้มีคนทำ vite-plugin-node มาให้ใช้แล้ว ซึ่งเรา support nestjs adapter ด้วย รวมไปถึงเราสามารถเลือกใช้ complier ได้หลายอย่างด้วย ไม่ว่าจะเป็น esbuild หรือ swc ก็รองรับครับ ดังนั้นเรื่องความเร็วในการ build / compile อาจจะไม่ต้องกังวลมากขนาดนั้นครับ
- ในส่วนของการ test อันนี้ยังไม่เคยลองใช้ vitest กับ nestjs เหมือนกัน ถ้าใช้ได้ก็ดีเหมือนกันครับ แต่เท่าที่ค้นเร็ว ๆ เหมือนว่าตอนนี้ยังไม่ support ครับ แต่โดยส่วนตัวคิดว่า "ถ้าวันหนึ่ง" Nest JS support ESM module เต็มที่แล้ว อาจจะไม่ยากเท่าไรที่เราจะย้ายจาก jest ไป vitest ครับ
- สาเหตุที่ Nodejs-based backend framework ไม่ค่อยพัฒนาเท่าไรอาจจะเพราะว่าทุกคนหนีไปเขียนภาษาอื่นกันหมดแล้ว lol แต่คิดว่ายังไงแล้ว Framework ที่น่าจะดีเป็นอันดับต้น ๆ ในโลกของ Nodejs น่าจะยังเป็น NestJs อยู่
โดยรวมเห็นด้วยเรื่องที่ NestJS อาจจะทำให้เราติดแหงกอยู่กับ syntax เก่า ๆ แต่ส่วนตัวคิดว่าตอนนี้สิ่งที่สำคัญคือการหา Framework เพื่อสร้าง standard ในการเขียน Discord bot ให้มีระเบียบก่อน feature ที่หลาย ๆ ท่านเสนอมาจะได้เกิดขึ้นจริง ๆ ได้เร็ว ๆ ครับ ถ้าวันหนี่งเราเจอ Framework / library ก็อาจจะต้องมาคุยกันอีกทีว่าจะย้ายหรือเปล่า (แต่ถ้าเรามี test ที่นัดกุมพอ เรื่องการ migrate ก็อาจจะไม่ได้น่ากลัวขนาดนั้น (?))
หรือถ้าทุกคนมี tool ตัวอื่นก็แนะนำมาได้เลยนะครับ :)
from kaogeek-discord-bot.
@saenyakorn ดีเลยครับ มีตัวอย่างให้ reference และศึกษาเยอะๆ ขอบคุณที่แชร์ครับ
from kaogeek-discord-bot.
Related Issues (18)
- Setup the TypeScript codebase for the Discord bot HOT 1
- interaction.deferReply() cannot use with modal HOT 1
- [FEATURE] Sticky Message in chat HOT 3
- ใส่ GitHub Webhook ใน Discord HOT 2
- [FEATURE] way to view server logs
- fix isOnlyEmoji so that numbers are not considered emoji HOT 5
- Remove /data/dock/db.sqlite (might be unused) HOT 3
- remove "deleteReply()" if "disableAutoDeferReply" is true
- [BUG] stickao-set crash bot if user have DM disabled
- [BUG] stickao - sendDM
- Enhance nickname special characters detection.
- migrate from Keyv to Prisma HOT 1
- Create base Discord Bot
- add Vitest to project to allow unit testing some logic HOT 1
- Dependency Dashboard
- Add .DS_Store to .gitignore HOT 2
- [FEATURE] Reassign "flag" role for rejoining users. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kaogeek-discord-bot.