モックサーバーのエイリアスを設定しようとしています。 ts
ファイルをコンパイルしようとすると、tsconfig,json
-> paths
で定義されているにもかかわらず、適切なモジュールが見つからないというエラーが返されます
フォルダー構造:
├── server
│ └── src
│ └──/json
├── src
│ └──/modules
├── tsconfig.json
こちらが私の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"
]
}
エラー:Error: Cannot find module '@project/server/data/accounts/accountsList'
私は同じ問題に直面しました。私は多くのことを試しました、そして今私は私のために働く解決策を得ました。 angularプロジェクトにアプリとライブラリがあります。アプリでライブラリエイリアスを使用したいのですが。
私は次の構造を持っています:
├── projects
│ └── lib
│ └── src
│ └── lib
│ └── lib-service.ts
│ └── index.ts
│ └── app
│ └──tsconfig.app.json
├── tsconfig.json
ルートフォルダーのtsconfig.jsonファイルには、次のパスが定義されています。
"paths": {
"my-lib": [
"projects/lib/src/index.ts"
]
}
そこで、index.tsファイルにアクセスして、エクスポートしたいものを定義します。私の場合、index.tsファイルには次のエントリがあります。
export * from './lib/lib-service';
これで、エイリアスを使用して、アプリのコンポーネントのLibServiceにアクセスできます。
import {LibService} from 'my-lib';
このエントリをtsconfig.app.jsonファイルに追加した場合、この解決策は機能しないことに注意してください。 IDE(私の場合はWebStorm)がルートフォルダに近いtsconfig.jsonファイルでエイリアスを検索すると思います。 tsconfig.app.jsonのtsconfig.jsonを拡張します
"extends": "../../tsconfig",
多分あなたはあなたを再起動する必要がありますIDEインポート行の赤い下線を取り除くために。
この解決策がうまくいくことを願っています。 index.tsファイルでエクスポートするクラスを定義する必要があるため、もう少し設定作業が必要です。ただし、ライブラリを使用する場合は、他のアプリですべてを表示したくないので意味があります。
TLDR;
npm i -D module-alias
tsconfig.json
パスから_moduleAliases
へのマッピングをpackage.json
に追加します
"_moduleAliases": {
"foo": "dist"
}
その理由は、"jsx": "react"
を"module": "commonjs"
と組み合わせて使用すると、baseUrl
とpaths
が正しく構成されていても、絶対インポートを使用できなくなるためです。詳細な議論はこの issue にあります。
以下 tsconfig.json
は私のために働き、import { foo } from '@models'
など、関連するindex.ts
バレルのエクスポート:
{
"baseUrl": "./",
"paths": {
"@environment": ["./src/environments/environment.ts"],
"@models": ["./src/app/shared/models/index.ts"],
"@services": ["./src/app/shared/services/index.ts"]
},
}
パスエイリアスは、タイプチェックを行うためにTypeScript言語サービスでのみ使用されます。 NodeJS require()モジュールはそのような機能を実装していませんでした。したがって、パスエイリアスが必要な場合はNodeJSで実行できます。そのコードをNodeJSランドに持ち込む必要があります。
同じ問題が発生しました。研究後、このライブラリを使用して問題を解決しました。 [email protected] 。
npm i -g tsmon
tsmonを使用してts-nodeを置き換える
tsmon server/index.ts