node.js - Typescript non riesce a trovare il modulo esterno quando è referenziato da due file diversi
Potrei star perdendo qualcosa di ovvio, ma il risolutore di moduli di Typescript per commonjs non funziona come previsto.
Dato il seguente struttura di directory e file:
./first/shared.ts
./first/second/class_a.ts
./first/second/class_b.ts
./third/class_c.ts
Dove :
- class_a fa riferimento a shared.ts
- class_b fa riferimento a class_a.ts e class_c.ts
- class_c fa riferimento a shared.ts
Specificamente :
shared.ts:
class Shared{}
export = Shared;
class_a.ts:
import Shared = require('../shared');
class A{}
export = A;
class_b.ts:
import A = require('./class_a');
import C = require('../../third/class_c');
class B {}
export = B;
class_c.ts:
import Shared = require('../first/shared');
class C {}
export = C;
Tutti compilano tranne class_b.ts, utilizzando la seguente invocazione del compilatore:
tsc --module commonjs class_a.ts
La compilazione di class_b.ts fallisce con l'errore che non riesce a trovare shared.ts:
../../third/class_c.ts(1,25): error TS2307: Cannot find external module '../first/shared'.
Nota che se inverti l'ordine degli import in class_b.ts, ottieni un errore diverso:
class_a.ts(1,25): error TS2307: Cannot find external module '../shared'.
Sembra che il compilatore trovi shared.ts la prima volta che viene importato, ma non la seconda volta.
Sto usando tsc 1.4.1.0.
C'è qualcosa di evidente che mi sta sfuggendo qui?
Risposta n. 1
Posso verificare che questo è effettivamente un bug:
C:\Users\basaratsyed\Downloads\ts\fancyimport\first\second>node "C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\tsc.js" --module commonjs class_b.ts
../../third/class_c.ts(1,25): error TS2307: Cannot find external module '../first/shared'.
Detto ciò, non appare in l'API del servizio linguistico ad esempio atom-typescript, il che è probabilmente il motivo per cui non è stato ancora segnalato:
Nota: L'ho segnalato qui: https://github.com/Microsoft/TypeScript/issues/2193
