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'
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.
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 .
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"]
},
}
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