Visual Studio Code - איך להגדיר פרויקט TypeScript, VScode, Yarn2, Fastify


אני יודע שפעם פתרתי את זה, אבל אולי הנוף השתנה מאז. אני מנסה להקים פרויקט חדש בעיקר באמצעות Fastify, מתכנת ב-VSCode ב-TypeScript ומנהל תלותים עם Yarn2.

VSCode אומר לי שהוא לא מצליח למצוא את fastify. הוא גם לא מצליח למצוא את סוגי ה-Node למרות שהוספתי גם את fastify וגם את @types/node. ניסיתי מספר גרסאות וצעדים מהדברים הבאים, וידאתי שאני משתמש בגרסת TypeScript של סביבת העבודה של VSCode, עדכנתי את קובץ tsconfig.json להשתמש ב-node moduleResolution, וכו'. מה שהיה עובד בעבר כבר לא עובד יותר, אבל לא מצאתי פוסט אחד או מסמך עדכני שמסדר את הבעיה.

מה אני מפספס?

nvm install node               ## Install latest NodeJS
node --version > .nvmrc        ## Set the node version to use
yarn init -y                   ## Project initialization
yarn set version berry         ## Use yarn v2
yarn add --dev typescript      ## TypeScript all the way
yarn add --dev ts-node         ## Easier Ts script or task execution
yarn plugin import typescript  ## Magic?
yarn add --dev @types/node     ## Node types
yarn add --dev @yarnpkg/pnpify ## Emulate ./node_modules
yarn pnpify --sdk vscode       ## Setup workspace/environment     
yarn tsc --init -t ES2020      ## Generate tsconfig.json
yarn add fastify               ## Add fastify dep

חבילת.json

{
  "name": "server",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "devDependencies": {
    "@yarnpkg/pnpify": "^2.2.1",
    "ts-node": "^9.0.0",
    "typescript": "^4.0.3"
  },
  "dependencies": {
    "fastify": "^3.4.1"
  }
}

עדכון: למרות שעניתי להנחיית VSCode להשתמש בגרסת TypeScript של סביבת העבודה, גיליתי שאני עדיין צריך לציין אותה באופן ידני דרך ctrl+shift+p > Select TypeScript version... לאחר שעשיתי זאת, הבעיה משתנה מעט. ללא קשר למילת המפתח import, אני רואה עכשיו בעיית namespace:

תשובה #1

נאבקתי גם בניסיון להריץ את fastify. התברר שהבעיה היא שאתה צריך להריץ את fastify עם yarn node (שם הסקריפט שלך). מכיוון שה-yarn החדש ביטל את ספריית node_modules, הוא לא מצליח למצוא אותה. אבל yarn יצר פתרון עקיפי להריץ שם "yarn node" וזה פותר את הבעיה. אני לא יודע איך זה עובד בעצם.