typescript - Onko mahdollista määrittää polkuja projektin juuresta Aurelia-näkymämalleissa?


Olen melko uusi Aureliassa, joten ole hyvä ja ole lempeä minulle, jos tämä on ilmeinen kysymys tai jopa jotain, mitä ei pitäisi harkita tekevänsä. Dokumentaation ja erilaisten verkkolähteiden lukemisen perusteella tämä ei näytä olevan käsitelty missään.

Kun projektini kasvoi kooltaan, järjestelin uudelleen kansioita ja tiedostoja. Uudelleenrakentaessa se tuntui hieman kömpelöltä, koska piti tarkistaa polun oikea syvyys, ja myös kun siirsin näkymämalleja, minun piti muuttaa myös tuontipolkua.

Tällä hetkellä minun täytyy tuoda tietyt tiedostot näkymämalleihini seuraavasti:

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

Miellyttävämpänä pitämäni olisi käyttää suhteellista polkua, joka alkaa projektin juuresta, kuten:

import {log} from 'services/log'; 

Onko jotain, mitä olen jäänyt huomaamatta tai yksinkertaisesti en ymmärrä? Tiedän, että ./ avulla määritellään suhteellinen polku nykyisestä tiedostosta.

Päivitys:

Yritin samaa Aurelia Contact Manager -oppaassa, jossa kaikki tiedostot src-kansiossa ovat samalla tasolla. Jos siirrän 'wep-api.ts'-tiedoston 'src/services'-kansioon ja haluan tuoda sen tiedoston näkymämallista 'src/components/users'-kansion sisältä, minun täytyy käyttää tuontia seuraavasti

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

Näyttää siltä, että se ei toimi pelkän 'services/web-api' kanssa ja virhe on

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

Aurelia.json-tiedosto sisältää

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

Vastaus #1

Näyttää siltä, että TypeScript-kääntäjä täytyy konfiguroida, jotta pääsee haluttuun polkuun.

tsconfig.json

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

Tämän ansiosta tuonnit toimivat nyt esimerkiksi muodossa 'services/web-api' (sijaitsee 'src') mistä tahansa 'src'-kansion alaisesta tiedostosta ja kansiorakenteesta.

Kiitos kuuluu stoffeastromille Aurelia Gitter -kanavalta, joka oikeasti osoitti oikean suunnan.

Vastaus #2

Tämän pitäisi toimia aivan hyvin. Aurelian Doc HUBin dokumentaatiossa sanotaan:

"Polku, jonka määrität from-attribuutissa, voi olla kahdessa muodossa: Se voi olla suhteessa sovelluksesi juureen tai suhteessa nykyisen näkymäsi polkuun. Polku, joka ei ala ./ tai ../-merkeillä, on suhteessa sovelluksesi juureen, kun taas polku, joka alkaa ./ tai ../-merkeillä, on suhteessa näkymäsi polkuun. Huomaa, että voit käyttää useita ..-merkkejä siirtyäksesi tarpeen mukaan hakemistorakenteessa ylöspäin."

Tämä toimii oikein myös käytännössä (erityisesti aurelia-cli kanssa, jota minä käytän).

Siksi lausunto, kuten kirjoitit sen:

import {log} from 'services/log';

tuo tehokkaasti viewmodelin (log.ts) ja näkymän (log.html, ellei @noView-koristetta ole määritelty) kansiosta /src/services.

Vain luokka (Ei näkymää)

Jos sinulla ei ole näkymää, se aiheuttaa virheen, ellei erikseen kerro Aurelialle, ettei sitä tarvitse etsiä. Työskennelläksesi tämän ympäri, tuo noView ja lisää koristelija (decorator) ennen luokkasi määritelmää, kuten näin:

import {noView} from 'aurelia-framework';

@noView 
export class MyClass {

Aiheeseen liittyviä artikkeleita