web-dev-qa-db-fra.com

Impossible de trouver le module défini dans tsconfig `chemins`

J'essaie de configurer des alias pour mon faux serveur. Chaque fois que j'essaie de compiler des fichiers ts, il renvoie une erreur indiquant qu'il n'a pas pu trouver les modules appropriés, même si ceux-ci sont définis dans tsconfig,json-> paths

Structure des dossiers:

├── server
│   └── src
│       └──/json
├── src
│   └──/modules
├── tsconfig.json

Voici mon tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./src",
        "experimentalDecorators": true,
        "jsx": "react",
        "lib": [
            "dom",
            "es2015",
            "es2015.promise"
        ],
        "module": "commonjs",
        "moduleResolution": "node",
        "noImplicitAny": true,
        "noUnusedLocals": true,
        "esModuleInterop": true,
        "paths": {
            "@project/app/modules/*": [
                "modules/*"
            ],
            "@project/server/data/*": [
                "../server/src/json/*"
            ]
        },
        "sourceMap": true,
        "target": "es5"
    },
    "exclude": [
        "node_modules",
        "tools"
    ]
}

Erreur: Error: Cannot find module '@project/server/data/accounts/accountsList'

9
Jamil Alisgenderov

J'ai fait face au même problème. J'ai essayé beaucoup de choses et maintenant j'ai une solution qui fonctionne pour moi. J'ai une application et une bibliothèque dans mon projet angular. Je veux utiliser un alias de bibliothèque dans mon application.

J'ai la structure suivante:

├── projects
│   └── lib
│       └── src
│           └── lib
│               └── lib-service.ts
│           └── index.ts
│   └── app
│       └──tsconfig.app.json
├── tsconfig.json

Dans le fichier tsconfig.json dans le dossier racine, j'ai défini les chemins suivants:

"paths": {
  "my-lib": [
    "projects/lib/src/index.ts"
  ]
}

Là j'accède à un fichier index.ts où je définis les choses que je veux exporter. Dans mon cas, le fichier index.ts a l'entrée suivante:

export * from './lib/lib-service';

Maintenant, je peux accéder à LibService dans les composants de l'application à l'aide de l'alias:

import {LibService} from 'my-lib';

Il est important de mentionner que cette solution ne fonctionne pas si j'ajoute cette entrée au fichier tsconfig.app.json . Je pense que le IDE (dans mon cas WebStorm) recherche des alias dans le tsconfig.json fichier qui est proche du dossier racine. J'étends donc le tsconfig.json dans mon tsconfig.app.json

"extends": "../../tsconfig",

Vous devrez peut-être vous redémarrer IDE pour supprimer le soulignement rouge de la ligne d'importation.

J'espère que cette solution fonctionne pour vous. Vous devez faire un peu plus de travail de configuration car vous devez définir les classes que vous souhaitez exporter dans le fichier index.ts. Mais en cas d'utilisation de bibliothèques, cela a du sens car vous ne voulez pas que tout soit visible pour une autre application.

4
troYman

TLDR;

npm i -D module-alias

et ajoutez les mappages de votre tsconfig.json chemins vers _moduleAliases dans votre package.json

"_moduleAliases": {
  "foo": "dist"
}

Quant au raisonnement derrière, en utilisant "jsx": "react" en conjonction avec "module": "commonjs" vous empêche de pouvoir utiliser les importations absolues même si baseUrl et paths sont configurés correctement. Une discussion détaillée peut être trouvée dans ce issue .

2
Mateja Petrovic

Le suivant tsconfig.json a fonctionné pour moi, permettant à import { foo } from '@models' etc pour le index.ts exportations de barils:

{
    "baseUrl": "./",
    "paths": {
      "@environment": ["./src/environments/environment.ts"],
      "@models": ["./src/app/shared/models/index.ts"],
      "@services": ["./src/app/shared/services/index.ts"]
    },
}
1
Avolition

l'alias de chemin n'est utilisé que par le service de langage TypeScript pour effectuer une vérification de type. Le module NodeJS require () n'a pas implémenté une telle fonctionnalité. Donc, si nous avons besoin, l'alias de chemin peut être exécuté dans NodeJS. Vous devez apporter ce code dans NodeJS land.

J'ai aussi le même problème. après des recherches, j'utilise cette bibliothèque pour résoudre le problème. [email protected] .

npm i -g tsmon

utiliser tsmon pour remplacer ts-node

tsmon server/index.ts
0
Ling