Croix-des références de projet entre les deux projets
Est-il possible de faire une référence entre deux caractères d'imprimerie projets? Supposons que nous disposons de la structure de projet suivante:
Module1.ts
contient:
module TestModule {
export interface Interface1 {
}
}
Module2.ts
contient:
module TestModule {
export interface Interface2 extends Interface1 {
}
}
Test1
est référencé dans Test2
. J'obtiens une erreur Could not find symbol 'Interface1'
dans Module2.ts
. Il travaille au sein d'un projet, mais je ne sais pas comment le rendre visible dans l'autre projet... Peut-être qu'il n'est pas possible pour le moment.
[Modifier 1.]
Lorsque j'essaie d'utiliser TestModule.Interface1
modèle, j'obtiens le même message d'erreur (dit de manière différente). Mais l'IntelliSense voit mon Interface1
:
[Modifier 2.]
J'ai remarqué que je ne peux pas utiliser les fichiers de l'autre projet. Même si j'ai une bonne référence (///<reference ...
) ajoutée et lié tous les fichiers dans mon 1er projet.
Vous devez vous connecter pour publier un commentaire.
Il ya beaucoup de façons dont vous pouvez faire cette.
Option 1 - Les Références De Projet (Tapuscrit 3.0+)
Si vous utilisez la Machine 3.0 puis regarder à l'aide des références de projet. Lire plus ici.
Option 2 - le script de construction
Utiliser quelque chose comme gulp-tapuscrit, grunt-ts, ou tout simplement un script batch pour copier les fichiers dans un dossier dans le projet principal.
Sinon, exécution d'un événement de construction dans Visual Studio qui va copier les fichiers sur le projet principal.
Option 3 - mnp paquet
Si vous utiliser npm, vous pouvez créer un package pour un autre projet. Ensuite, vous pouvez utiliser votre colis dans votre projet principal. La spécification d'un local de dépendance est une bonne manière de faire ceci ou en utilisant quelque chose comme sinopia, qui est privée repository server. Je n'ai jamais utilisé, mais il semble que cela pourrait bien fonctionner.
Option 4 - package NuGet
Vous pourriez regarder dans création d'un package nuget et puis l'installation localement.
Option 5 -
--declaration --outDir
option du compilateurVous pouvez définir la
--outDir
option du compilateur ou de l'outDir
propriété danstsconfig.json
avec le répertoire d'un autre projet, puis aussi le compiler avec--declaration
de sorte qu'il génère de la déclaration des fichiers (.d.ts
) trop. Par exemple:--declaration --outDir ../Test1/External
.Réponse Originale À Cette Question (À L'Aide De
--out
)Vous pouvez faire quelque chose de similaire dans Visual Studio, si vous faites un clic droit sur votre projet de bibliothèque et cliquez sur propriétés. Dans le
TypeScript Build
onglet, cochez l'optionCombine JavaScript output into file
et spécifiez l'emplacement dans votre projet principal que vous souhaitez (Ex.$(SolutionDir)/TypedApp/External/TypedLibrary.js
). Puis aussi vérifierGenerate declaration files
afin de générer un.d.ts
fichier.Une fois cela fait, construire votre projet de bibliothèque et de l'inclure la
.js
, et.d.ts
dans votre projet principal. Inclure le.js
fichier dans votre code html et de référence de la.d.ts
dans votre fichier d'enregistrement des fichiers.Chaque fois que vous reconstruisez le projet d'une bibliothèque, il sera automatiquement mise à jour le principal projet avec les modifications.
.js
,.d.ts
, et.js.map
fichiers (comme ci-dessus), puis des copies de ces fichiers à chaque projet qui en a besoin. Vous pourriez utiliser un Post-créer un événement à faire de la copie d'après les fichiers sont générés (Project > Properties > Build Events > Post-build event command line
).La solution proposée par @dhsto fonctionne, mais j'ai trouvé une solution de rechange à l'aide de dossiers liés. J'ai écrit à ce sujet en détail dans cet article, ici, est de savoir comment il peut être mis en œuvre:
Il peut être atteint par la création d'un dossier pour stocker vos références, j'aime le nom de cette “_referencesTS”, le dossier contient tous les liens vers des fichiers à partir de Test1. Cela peut se faire individuellement, mais qui allait devenir très lourd, si elle avait à faire pour chaque nouveau fichier TS. Liaison d'un dossier cependant permettra de relier tous les fichiers en-dessous d'elle, cela peut être fait en modifiant le fichier csproj.
À éditer le fichier cliquez-droit sur le Test2 projet et cliquez sur “
Unload Project
”, puis cliquez-droit sur le projet et cliquez sur “Edit Test2.csproj
”. Accédez à la<ItemGroup>
qui contient le<TypeScriptCompile>
balises et insérez le code ci-dessous:Remplacer le chemin d'accès relatif à l'emplacement de vos fichiers TS en Test1, il utilise les caractères de remplacement (*) pour relier le tout .les fichiers ts (dicté par la
*.ts
) dans tous les sous dossiers (dicté par la\**\
)..Le TS fichiers dans ces dossiers apparaissent maintenant à l'intérieur d'Test2, permettant automatique tapuscrit de référencement.
Remarque: Le seul inconvénient de cette approche est que lorsqu'un nouveau fichier est ajouté à Test1 dans un dossier lié, l'utilisateur a pour décharger et charger le projet ou de le fermer et d'ouvrir la solution pour qu'il apparaisse dans Test2.
Frustré avec l'état de choses, j'ai écrit un package NuGet qui la plupart du temps de résoudre ce problème. En utilisant le package NuGet, vous pouvez juste ajouter une référence à partir d'un projet à l'autre et il va faire le travail de la copie de fichiers d'une manière qui est sûr accidentellement l'édition du fichier incorrect et donne encore intellisense et le débogage.
De détails peuvent être trouvés dans le fichier Readme.md, ou vous pouvez simplement installer le package NuGet et exécuter (je recommande au moins la lecture de la manière de servir de l'article).
https://github.com/Zoltu/BuildTools.TypeScript.FromReferences
Je tiens juste à ajouter à la réponse de David Sherret que les fichiers lib à la TypedApp projet pourrait être ajouté comme Lien des fichiers au lieu de dépendre d'un poste de construire des événements. Je vais avoir quelques problèmes avec la poste construire des événements dans les grandes solutions avec beaucoup de projets, et les fichiers des liens travaillent maintenant ok pour moi. (Je ne peux pas ajouter un commentaire pour la réponse car je n'ai que 35 points de réputation).
Si vous compilez avec l'
--out
paramètre, vous pouvez simplement référence Module1.ts du Module2.ts à l'aide de///<reference
Pour en savoir plus sur le code des modèles de l'organisation en caractères d'imprimerie voir http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1Ce que visual studio services linguistiques voit disponible (ce qui est tout) est différent de ce que vous compilez et disponibles au moment de l'exécution.
/// <reference
mais le problème, c'est mon projet est énorme et je dois référence bilions de fichiers. Nouveau TS prend en charge le partage des classes dans le même module. Et il fonctionne très bien dans un projet, mais ne peut pas le faire coopérer alors que j'ai deux ou plus de projets... 🙁Si vous avez besoin de partager du code entre plusieurs projets, vous pouvez toujours créer un lien symbolique sur chaque projet où vous en avez besoin.
http://en.wikipedia.org/wiki/Symbolic_link
basarat de réponse est le plus proche étant la solution la plus fiable pour un contre-projet Tapuscrit références. Cependant, lors de la fusion partagé Tapuscrit de code avec une référence au projet du Tapuscrit (important, par exemple, si vous avez besoin de cibler différents ECMAScript les versions), la Source du fichier de la Carte ne permet pas de résoudre partagée des répertoires du projet, afin de débogage ne fonctionne pas (en fait, Visual Studio plante souvent après l'ajout de points d'arrêt pour les fichiers référencés dans un autre projet).
Liée fichiers de tout type (Visual Studio, des liens et des liens symboliques) ne fonctionnent pas avec le débogage dans n'importe quel système (Visual Studio, Chrome, WebStorm, etc.)--les fichiers liés essentiellement n'existent pas à l'ASP.NET débogueur, ni aucune autre débogueur; ils n'existent que dans Visual Studio.
Reportez-vous à cette question/réponse indiquant ce qui a beaucoup travaillé pour à la fois solide code d'entretien et de débogage dans Visual Studio, Chrome et Firefox, tout en conservant la possibilité de combiner le code partagé avec le référencement des projets de code (c'est important, par exemple, si vous avez besoin de cibler différents ECMAScript versions): Visual Studio: Comment déboguer Tapuscrit d'un projet partagé à l'aide de IIS Express et de la croix-des références de projet (pas de lien ou de dupliquer des fichiers)
La accepté de répondre interdit de débogage dans Visual Studio lorsqu'un point d'arrêt est défini dans le Partagé projet. (Au mieux, le débogueur s'arrêter sur une ligne dans le compilé en javascript, mais pas le Tapuscrit original et certainement pas dans son origine, l'emplacement du projet.)
Dans le projet Partagé de propriétés, disons que Combiner Javascript sortie dans un [seul] fichier est vérifié et mis à
AllShared.js
, ce qui rend également unAllShared.d.ts
fichier car Générer de la déclaration des fichiers est cochée, et fait également uneAllShared.js.map
parce que Générer source des cartes est cochée.Le référencement de projet ne doit PAS copier ou lier ces fichiers en fonction de la solution retenue n'. Au lieu de cela:
Partie 1, en référence au projet, créer
/typings/tsd.d.ts
si elle n'existe pas déjà, et de les ajouter en bas de ce fichier la ligne///<reference path="../../SharedProject/AllShared.d.ts" />
. Une fois que c'est fait, (et au moins un succès de la compilation de SharedProject est fait), de l'Intellisense et le Tapuscrit compilateur devrait voir Interface1 etc. (Vous aurez probablement obtenir un rouge ligne sinueuse en soulignant la déclaration, si le chemin/fichier n'existe pas, ce qui est agréable.)La partie 2, en référence au projet de
index.html
, ajoutez la ligne<script src="http://localhost:29944/AllShared.js"></script>
avant que son propre projet balises de script. Le localhost partie provient de l'Partagé Propriétés du projet, onglet Web, Projet d'Url. (À la fois "IIS Express" et " IIS Local de travail.)Maintenant, lorsque vous exécutez le référencement de projet, vous devriez voir Internet Explorer** demande les dossiers pertinents de leurs "sites web". Visual Studio de points d'arrêt doivent être frappés qu'ils soient dans SharedProject ou le référencement de projet.
. Bien que cette solution fonctionne sans gulp/grunt/powershell, Visual Studio Combiner Javascript de sortie en un seul fichier ne pas coller les fichiers dans un ordre particulier, et elle finira par casser votre code. Ensuite, vous aurez besoin d'ajouter Gulp/etc. pour le référencement de projet pour insérer un
<script src="http://localhost:29944...
balise pour chaque fichier Partagé***, car le maintien deindex.html
mis à jour par la main est une mauvaise option. (L'ajout de Gulp pour le projet Partagé, à concat l' .js et .d.les fichiers ts en singles se heurte à un problème avec .js.carte fichiers, qui ne peuvent pas être simplement concatted.)** IE et VS sont tous deux des produits Microsoft, de sorte que IE fonctionne vraiment mieux si vous voulez utiliser VS de points d'arrêt et débogueur au lieu d'un navigateur web.
*** Gulp n'est pas comme les injections d'url, seulement filepaths. Étant donné les commentaires HTML dans
index.html
comme<!-- SharedStuff:js --><!-- endinject -->
, contourner cela de la sorte: