Obecnie używa maszynopisu w aplikacji node.js. Skompilowałem swoją aplikację i używam typescript's path mapping feature.Mapowanie ścieżek maszynopisu nie jest tłumaczone w aplikacji węzła
"api/*" powinno zamiast tego wyglądać w folderze głównym. Używanie następujących w prace rozwojowe:
nodemon --watch src -e ts,tsx --exec ts-node -r tsconfig-paths/register --disableWarnings ./src/index.ts
tsconfig-paths/register
pozwala wymagać, aby być prawidłowo przetłumaczone i TS-węzeł będzie wykonywał/uruchomić aplikację poprawnie. Teraz pojawia się problem, kiedy przechodzę do produkcji. Kiedyś w produkcji po prostu uruchamiałem tsc
w folderze i przeniesiono zawartość outDir (dist /) do/app w moim obrazie doka, i uruchomiłem node /app/index.js
. To działało, dopóki nie zacząłem używać funkcji mapowania ścieżek maszynopisu. Teraz po prostu pojawia się błąd:
Error: Cannot find module 'api/module/path/here'
Od this github comment nazwy modułu nie są widocznie odwzorowany na wyjściu skompilowany javascript.
Mój plik tsconfig.json:
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"jsx": "react",
"allowJs": true,
"alwaysStrict": true,
"sourceMap": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitAny": false,
"noImplicitThis": false,
"strictNullChecks": false,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"lib": ["es2017", "dom"],
"baseUrl": "src",
"outDir": "dist",
"types": [
"node"
],
"paths": {
"universal/*": ["../../universal/*"],
"api/*": ["*"],
"*": ["node_modules/*"]
},
"typeRoots": [
"./node_modules/@types",
"./src/types"
]
},
"include": [
"src/**/*"
]
}
Jakie jest zalecane podejście do korzystania ścieżkę względną mapowanie w node.js środowiska? Jeśli maszynopis zastępuje rozwiązanie, dlaczego nie powinien przepisać instrukcji wymagających? Głupie jest angażowanie kolejnego kroku, takiego jak babel czy webpack, tylko po to, aby dodać funkcjonalność, jaką maszynopis zapewnia rozdzielczości modułu.
EDYCJA: Po dodatkowym kopaniu znalazłem, że mogę użyć -r tsconfig-paths/register
w moim środowisku węzła (po prostu muszę skopiować w moim pliku tsconfig.json). Mogę przełączyć mojego punktu wejścia w dokowanym do:
ENTRYPOINT [ "node", "-r", "tsconfig-paths/register", "index.js" ]
Problem polega na tym, że teraz trzeba zmodyfikować moje tsconfig.json
baseURL, jako katalog src/
nie istnieje. Zauważyłem także, że rozdzielczość nie działa dla modułu "util" (najwyraźniej używa on util w folderze node_mulules zamiast biblioteki util.js), co powoduje awarię mojej aplikacji.
Węzeł ts kompiluje się i działa poprawnie z bieżącą konfiguracją. – FrankerZ