当前在node.js应用程序中使用类型记录。我已经编译了我的应用程序,我正在使用类型记录路径映射特征。
‘'api/*’应该在根文件夹中查找。在开发工作中使用以下内容:
nodemon --watch src -e ts,tsx --exec ts-node -r tsconfig-paths/register --disableWarnings ./src/index.tstsconfig-paths/register允许正确翻译需求,ts节点将正确执行/运行应用程序。现在,当我转移到生产部门时,问题就会发生。在过去的生产中,我只是在文件夹上运行tsc,并将outDir (dist/)的内容移到outDir映像中的/app中,然后运行node /app/index.js。在我开始使用类型记录的路径映射功能之前,这种方法一直有效。现在我只得到一个错误:
错误:找不到模块‘api/模块/路径/这里’
在这个github评论中,显然没有将模块名映射到输出编译的javascript。
我的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/**/*"
]
}在node.js环境中使用相对路径映射的推荐方法是什么?如果打字本是解决问题的人,为什么不重写要求语句呢?像babel或webpack这样的另一个步骤,仅仅为了增加类型记录提供的模块分辨率的功能,感觉很傻。
编辑:经过进一步的挖掘,我发现我可以在我的节点环境中使用-r tsconfig-paths/register (我只需要在我的tsconfig.json文件中复制)。我可以把码头的入口点改为:
ENTRYPOINT [ "node", "-r", "tsconfig-paths/register", "index.js" ]问题是,我现在需要修改我的tsconfig.json baseUrl,因为目录src/不存在。此外,我还注意到,这个解决方案并不适用于模块“util”(它显然是在我的node_modules文件夹中使用util而不是node.js util库),这导致了我的应用程序崩溃。
发布于 2017-12-29 00:17:02
根据您提供的源,您可能可以使用(例如,将最后一条路径解析为第一条路径):
"rootDirs": [
"src/api/module/path/here",
"api/module/path/here"
]问题是,我现在需要修改我的tsconfig.json baseUrl,因为src/目录不存在。
类型记录路径映射特征声明:
rootDirs的灵活性不限于指定逻辑合并的物理源目录列表。所提供的数组可以包含任意数量的临时目录名称,无论它们是否存在。这允许编译器以一种类型安全的方式捕获复杂的捆绑和运行时特性,例如条件包含和特定于项目的加载程序插件。
另外,您是否尝试过跟踪模块解析:tsc -trace分辨率?
https://stackoverflow.com/questions/47913699
复制相似问题