55 votes

Tapuscrit D'Importation Chemin Alias

Je suis actuellement en train de travailler sur un Tapuscrit de l'application qui est composé de plusieurs Nœud des modules écrits en caractères d'imprimerie, qui sont installés dans l' node_modules répertoire.

Avant de poursuivre, je tiens à signaler que je suis en utilisant Tapuscrit 2.0, je ne suis pas défavorable à l'utilisation de l'2.1 dev libérer en cas de besoin ainsi. Je veux juste obtenir ce travail.

La structure de chaque Nœud du module est quelque chose le long des lignes de:

dist/
    es2015/
        index.js
        utils/
            Calculator.js
            Calculator.d.ts
            Date.js
            Date.d.ts
            Flatpack.js
            Flatpack.d.ts
src/
    index.ts
    utils/
        Calculator.ts
        Date.ts
        Flatpack.ts

Le dossier dist est la source générée, ce chemin étant configuré à l'aide d' outDir à l'intérieur de mon tsconfig.json le fichier. J'ai aussi configuré le main propriété dans mes package.json être dist/es2015/index.js.

Les choses importantes sont à noter:

  • Dans mon projet, je suis à l'aide de moduleResolution type d' node
  • Je suis à l'aide de la Machine 2.0
  • Je ne demande pas comment faire pour importer un fichier à partir de l'intérieur de l'emballage. Je suis d'installer le paquet via Npm, puis de l'importer via packagename/ depuis l'intérieur d'une application à l'aide de ce module.

Maintenant vient ma question/problème. Tandis que l'importation de fichiers à partir de ce module, je voudrais être capable de faire cela:

import {Sin, Cos, Tan} from "common-utils/utils/Calculator";

Toutefois, le fichier ne peut pas résoudre à l' dist/es2015/utils répertoire. Idéalement, j'aimerais que mon importations à résoudre à partir de ce dist le dossier et non pas à partir de la racine, qui est ce qui semble se passer.

L'importation mentionnées ci-dessus doit être écrit comme suit pour le faire fonctionner:

import {Sin, Cos, Tan} from "common-utils/dist/es2015/utils/Calculator";

Toutefois, l'écriture dist/es2015 chaque moment n'est pas idéal et il est tout à fait certains des importations look très long. Est il possible que je peux configurer mon module pour résoudre à l' dist/es2015 annuaire? Je ne veux pas avoir à mettre en substitue à l'intérieur de mon projet, idéalement, chaque module de spécifier l'emplacement où les fichiers sont résolus à partir.

Si vous ne savez toujours pas ce que je demande (et je m'excuse si c'est déroutant) dans Jspm lorsque vous créez un plugin/module pour être utilisé avec Jspm, vous pouvez spécifier à l'intérieur de l' package.json pour le module de quelque chose comme ce qui suit:

  "jspm": {
    "registry": "npm",
    "jspmPackage": true,
    "main": "my-module",
    "format": "amd",
    "directories": {
      "dist": "dist/amd"
    },

Je suis à la recherche de l'équivalent d'au-dessus en caractères d'imprimerie (si elle existe). Une cartographie de la directive, de sorte que lorsque l'utilisateur exécute npm install my-cool-package puis dans leur application tente d'importer quelque chose, toutes les importations par défaut résoudre à l' commonjs répertoire (l'exemple ci-dessus pour Jspm utilise amd, mais même local).

Est-ce possible ou suis-je malentendu quelque chose ici? Je sais que certains nouveau chemin de cartographie fonctionnalités ont été ajoutées à la dernière version, mais la documentation sur l'utilisation, est presque inexistante.

116voto

faraz Points 2787

Ainsi, après la lecture de votre commentaire, j'ai réalisé que j'ai mal compris votre question! Si vous souhaitez contrôler les chemins importé à partir d'un paquet de point de vue, il suffit d'utiliser ensemble l' main de la propriété de votre package.json d'un fichier qui représente correctement l'objet graphique de votre module.

{
  "main": "common-utils/dist/es2015/index.js"
}

Si vous êtes en essayant de contrôler l'importation des chemins à partir d'un projet du point de vue, ce que vous cherchez est Tapuscrit 2 du nouveau chemin de cartographie pour le module de résolution. Vous pouvez activer le mappage de chemin d'accès par la configuration de votre tsconfig.json comme suit:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "angular2/*": ["../path/to/angular2/*"],
      "local/*": ["../path/to/local/modules/*"]
    }
  }
}

Puis, dans votre fichier d'enregistrement des fichiers, vous pouvez importer les modules suivants:

import { bootstrap } from 'angular2/bootstrap';
import { module } from 'local/module';

Pour plus de détails sur le Chemin de Cartographie en caractères d'imprimerie 2 voir à ce Github question.

Dans votre cas, je pense que la configuration suivante devrait fonctionner:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "common-utils/utils/*": ["./node_modules/common-utils/dist/es2015/utils/*"]
    }
  }
}

5voto

Joon Points 1132

Si vous êtes en utilisant des chemins, vous aurez besoin de changer le dos des chemins absolus pour les chemins relatifs pour qu'il fonctionne après la compilation de la machine dans la plaine de javascript à l'aide d' tsc.

Solution plus populaire de ce qui a été tsconfig-les chemins de la mesure.

Je l'ai essayé, mais il ne fonctionne pas pour moi, pour mon installation compliquée. Aussi, il résout les chemins d'exécution, sens de surcharge en fonction de votre taille d'emballage et de résoudre les performances.

Alors, j'ai écrit une solution moi-même, tscpaths.

Je dirais que c'est mieux en général car il remplace les chemins au moment de la compilation. Il n'y a pas d'exécution de dépendance ou de toute surcharge de performance. Il est assez simple à utiliser. Vous avez juste besoin d'ajouter une ligne à votre scripts de génération en package.json.

Le projet est encore jeune, donc il pourrait y avoir quelques problèmes si votre configuration est très compliqué. Il fonctionne parfaitement pour ma configuration, si mon installation est assez complexe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X