2016-02-12 7 views
0

J'ai lutté avec les différentes façons de créer des modules dans Typescript, en essayant d'encapsuler mon code avec élégance. Cependant, je pense que je suis perdu avec la façon dont certaines choses sont censées fonctionner.TapScript: Impossible de trouver le module à l'exécution

Essentiellement, je suis en train de faire deux projets travaillent ensemble:

Les définitions de type semblent correctes. Les problèmes viennent avec la bibliothèque. Donc j'essaie de garder les définitions dans un module nommé riotGamesApi, et un autre module nommé riotGamesTypeNode pour la bibliothèque. J'ai essayé d'importer le premier dans le second, et le pré-compilateur ne détecte rien de mal.

J'ai également commencé à écrire des tests en utilisant mocha pour ma bibliothèque. Encore une fois, le pré-compilateur ne trouve rien de mal dans mon code.

Voici ce que je fais actuellement avec les modules:

Fichier riotgamesapi.d.ts (définitions de type)

declare module riotGamesApi { 
    export module champion { 
     [...] 
    } 
    [some more exports] 
} 

declare module "riotGamesApi" { 
    export = riotGamesApi; 
} 

Fichier riotgamesapi-typenode.ts (bibliothèque)

///<reference path="../lib/riotgamesapi-typedef/riotgamesapi" /> 
///<reference path="../typings/node/node" /> 

import * as api from "riotGamesApi"; 

export module riotGamesTypeNode { 
    [some classes here] 
} 

export = riotGamesTypeNode; 

Fichier riotgamesapi-typenode-tests.ts (tests de bibliothèque)

///<reference path="../lib/riotgamesapi-typedef/riotgamesapi" /> 
///<reference path="../src/riotgamesapi-typenode" /> 

import * as api from 'riotGamesApi'; 
import * as rtnode from '../src/riotgamesapi-typenode'; 

[Using rtnode in code] 

Mais après avoir compilé tout (avec gulp en utilisant commonjs et es5), lorsque je tente d'exécuter les tests, cette erreur se:

events.js:141 
     throw er; // Unhandled 'error' event 
    ^
Error: Cannot find module '../src/riotgamesapi-typenode' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:289:25) 
    at Module.require (module.js:366:17) 
    at require (module.js:385:17) 
    [...more error lines...] 

Je ne comprenez ce que je fais de mal ici, car cela semble être la seule façon pour le pré-compilateur de ne pas m'avertir de quelque chose. Il me manque sûrement certaines choses, mais alors le pré-compilateur?

J'ai lié au contenu des fichiers complets ainsi vous pouvez rechercher plus d'informations si vous avez besoin, ou l'essayer vous-même en clonant le git. (J'utilise gulp pour cela, la tâche pour tester le code est gulp test)

Merci d'avance pour tout conseil ou solution que vous pourriez avoir, parce que je suis coincé avec cela depuis un certain temps maintenant. .. :)

Répondre

1

Regardez votre répertoire de construction de sortie, il n'y a pas src dir là-dedans si ../src/riotgamesapi-typenode dans vos tests ne seront jamais résolus à riotgamesapi-typenode.js. Corrigez votre configuration Gulp pour afficher la structure de répertoire attendue. Je dois aussi mentionner que mélanger des espaces de noms (modules internes AKA) avec des modules externes comme vous le faites en riotgamesapi-typenode.ts est généralement une mauvaise idée, et l'utilisation de commentaires de chemin de référence n'est plus recommandée (référencez-les dans votre tâche Gulp) .

+0

Merci pour votre réponse.J'ai essayé de référencer des modules sans utiliser de chemins, mais je n'arrive tout simplement pas à le faire fonctionner. Dans le fichier "riotgamesapi-typenode.ts", je n'utilise plus que "module riotGamesTypeNode" au lieu de "export". Est-ce la bonne façon de le faire? Parce que le fichier de test, même après l'avoir référencé en utilisant '/// ', l'instruction 'import * comme rtnode de 'riotGamesTypeNode';' ne trouve toujours pas le module (me dit cela au moment de la compilation). Pouvez-vous voir ce que je fais mal ici alors? (J'ai aussi poussé une nouvelle version à git) –

+1

@Protectator Vous essayez d'utiliser une instruction d'importation de style ES6 pour importer un module interne, cela ne fonctionne pas comme cela, cela fonctionne uniquement avec des modules externes. J'ai arrangé les choses pour vous et soumis un [PR] (https://github.com/Protectator/riotgamesapi-typenode/pull/2), ce n'est pas forcément le moyen le plus propre de mettre les choses en place mais au moins fonctionne maintenant et vous pouvez l'améliorer si besoin est. –

+0

Oui, les changements que vous avez faits fonctionnent. Merci beaucoup pour cette aide, je regarde comment vous avez fait cela :) Je peux enfin travailler sur ce que j'avais initialement prévu. –