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

