build - הגדרת outDir של TypeScript ב-tsconfig.json לא עובדת


נראה שאני לא מצליח לגרום לדגל outDir לעבוד כאשר הוא משמש ב-package.json. מבנה התיקיות די פשוט: tsconfig.json ברמת השורש, יחד עם תיקיית src/ וקובץ index.ts אחד בתוספת תיקיות אחרות המייצגות מודולים אחרים.

כשמריצים את הפקודה tsc על קובץ האינדקס, היא יוצרת קובץ חדש לידו במקום בתיקיית הבנייה. מה אני עושה לא נכון?

ה-tsconfig שלי:

{
  "compilerOptions": {
    "outDir": "build"
  }
}

סקריפט הבנייה שלי ב-npm:

"build": "tsc src/index.ts"

אני מפעיל את הסקריפט מהתיקייה הראשית של הפרויקט. מעניין ש, הרצת אותו סקריפט עם הדגל --outDir עובדת מצוין.

תשובה #1

כאשר אתה מעביר קבצים לצורך קומפילציה עם tsc src/index.ts, ה-tsconfig.json שלך מתעלמים ממנו.

מהתיעוד:

כאשר קבצי קלט מצוינים בשורת הפקודה, קבצי tsconfig.json מתעלמים.

סקריפט הבנייה של npm שלך צריך להיות פשוט tsc מבלי להעביר קבצים כלשהם.

תשובה #2

במקרה שלי זה נזלזל כי היה לי noEmit: true ב-tsconfig.json. מסיבה כלשהי, הקבצים עדיין הופקו, אך באותו תיק במקום לפעול לפי outDir.

קובץ התצורה נקרא נכון והשגיאה הזו הופיעה גם כאשר השתמשו בדגל.

תשובה #3

אם אתה משתמש באפשרות המהדר incremental, ייתכן שאינך מקבל פלט אם מחקת או שינית קבצים ב-outDir שלך אך לא הסרת את הקובץ .tsbuildinfo.

הבעיה שלי הייתה קצת שונה, אבל גוגל הביאה אותי לכאן - אז חשבתי שאחרים גם עשויים להגיע.

תשובה #4

זו מבנה התיקיות שלי.

שמור את קבצי ה-TypeScript בתיקיית src ושמור את tsconfig.json בשורש.

בקובץ tsconfig json הוסף את שם התיקייה ל-outDir ב-compilerOptions

"compilerOptions": {    
    "outDir": "build",
    "module": "commonjs",
    "target": "es6",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noImplicitAny": true,
    "sourceMap": true
  },

והריץ את הפקודות למטה.

פשוט עבור לתיקיית השורש והקלד

tsc

או

tsc --outDir .

שיתקין את התיקייה outDir עם קבצי js ו-map.js.

מקור: https://github.com/Microsoft/TypeScript/issues/10585