typescript - האם אפשר לציין נתיבים מהשורש של הפרויקט במודלים של תצוגה באורליה?


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

כשהפרויקט שלי גדל בגודלו, ארגנתי מחדש תיקיות וקבצים. במהלך הריפקודינג זה הרגיש קצת מסורבל, כדי לבדוק את העומק הנכון של הנתיב, וגם כאשר העברתי מודלי צפייה נדרשתי לשנות גם את נתיב הייבוא.

כרגע אני צריך לייבא קבצים מסוימים במודלים של התצוגה שלי כ:

import {log} from './../../services/log';

מה שהיה לי נוח יותר זה שיהיה לי נתיב יחסי שמתחיל משורש הפרויקט כמו:

import {log} from 'services/log'; 

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

עדכון:

ניסיתי את אותו הדבר עם המדריך ל-Aurelia Contact Manager שבו כל הקבצים בתיקיית src נמצאים באותה רמה. אם אני מעביר את הקובץ 'wep-api.ts' לתיקיית 'src/services' ורוצה לייבא את הקובץ הזה מ-viewmodel בתוך 'src/components/users', אני צריך להשתמש בייבוא כ

import {WebAPI} from './../../services/web-api';

נראה שזה לא עובד רק עם 'services/web-api' והשגיאה היא

[ts] cannot find module 'services/web-api'

קובץ aurelia.json כולל

"paths": {
    "root": "src", ...

תשובה #1

נראה כי יש להגדיר את מהדר TypeScript כדי לגשת לנתיב הרצוי.

tsconfig.json

{ 
  ...
  "compilerOptions": {
    ...
    "baseUrl": ".",
    "paths": {
      "*":["src/*"]
    }
  }
  ...
}

עם זה במקום, ייבוא כעת עובד למשל 'services/web-api' (הממוקם ב-'src') מכל קובץ ומבנה תיקיות שמתחת ל-'src'.

כבוד מגיע ל-stoffeastrom מערוץ הגיטר של Aurelia, שהפנה בפועל לכיוון הנכון.

תשובה #2

זה אמור לעבוד בסדר גמור. התיעוד ב-Doc HUB של אורליה מציין:

«הנתיב שאתה מספק במאפיין from יכול להיות באחת משתי צורות: הוא יכול להיות יחסי לשורש היישום שלך או יחסי לנתיב התצוגה שבה אתה נמצא כרגע. נתיב שאין בו ./ או ../ בתחילת הנתיב יהיה יחסי לשורש היישום שלך, בעוד נתיב עם ./ או ../ יהיה יחסי לנתיב התצוגה שלך. שים לב שאתה יכול להשתמש בכמה .. כדי לטפס מעלה בעץ הספריות לפי הצורך.»

זה עובד נכון גם בפועל (בהחלט עם aurelia-cli, שזה מה שאני משתמש בו).

לפיכך, ההצהרה כפי שכתבת אותה:

import {log} from 'services/log';

יביא באופן אפקטיבי את ה-viewmodel (log.ts) ואת ה-view (log.html, אלא אם מצוין ה-decorator @noView) מתיקיית /src/services.

לכיתה בלבד (ללא צפייה)

אם אין לך תצוגה, זה יזרוק שגיאה אלא אם כן אתה מציין במפורש לאוררליה לא לחפש אחת. כדי לעקוף זאת, ייבא את noView והוסף את הדקורטור לפני הכרזת המחלקה שלך, כך:

import {noView} from 'aurelia-framework';

@noView 
export class MyClass {