Проблема заключалась в разрешении псевдонимов пути узла во время выполнения. Даже если машинопись была выполнена во время выполнения ts-node, псевдонимы не могут быть разрешены узлом как есть. (Я думаю)
Но это была только вершина айсберга. Я столкнулся бы с этим позже с моей настройкой шутки и во время выполнения JS.
Мне приходилось находить способ, чтобы в каждой среде выполнения интерпретировать мои псевдонимы. Было несколько npm пакетов, но для многих из них требовалось больше объявлений.
И я не хотел объявлять свои псевдонимы во всех конфигурационных файлах, которые у меня были, и зависел только от моего файла tsconfig.
После долгих испытаний у нас было только два модуля для установки tsconfig-paths для выполнения машинописного текста на ts-node. И @ ef-carbon / tspm для преобразования моих псевдонимов в место назначения сборки.
npm i -D tsconfig-paths @ef-carbon/tspm
Для ts-узла сценарий был изменен следующим образом:
ts-node -r tsconfig-paths/register ./src/server.ts
Для скомпилированного js вам нужно только выполнить:
ef-tspm
Для jest ts-jest требуется, он у меня уже был, но он не был правильно настроен. Я использовал встроенный помощник, чтобы настроить мои пути. Мой файл конфигурации Jest теперь выглядит так:
//jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest/utils');
const { compilerOptions } = require('./tsconfig');
module.exports = {
roots: ['<rootDir>/src'],
globals: {
'ts-jest': {
tsConfig: 'tsconfig.json',
diagnostics: {
warnOnly: true,
},
},
},
clearMocks: true,
coverageDirectory: 'coverage',
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
moduleFileExtensions: ['js', 'json', 'jsx', 'node', 'ts', 'tsx'],
testEnvironment: 'node',
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/src/' }),
pathToJest: 'npm test',
preset: 'ts-jest',
testMatch: null,
};
Вот как мои скрипты выглядят в моем пакете. json
"scripts": {
"dev:ts": "cross-env NODE_ENV=development nodemon",
"dev:js": "cross-env NODE_ENV=development npm run start:js",
"staging": "cross-env NODE_ENV=staging npm run start:js",
"production": "cross-env NODE_ENV=production npm run start:js",
"test": "cross-env NODE_ENV=testing jest --runInBand",
"test:debug": "npm run test --detectOpenHandles",
"start:js": "npm run build && nodemon --config nodemon-js.json",
"build": "npm run compile && npm run post:compile && npm run copyAssets",
"compile": "tsc",
"post:compile": "ef-tspm",
"copyAssets": "copyfiles -e ./src/**/*.ts -e ./src/**/*sample* -e ./src/**/*.json -u 1 ./src/**/* ./dist/"
},
Посмотрим, как это будет, я вероятно, добавьте решение grunt / gulp позже. Но пока это достаточно хорошо.