来自 tsconfig.json 的无服务器框架和路径映射不起作用
Posted
技术标签:
【中文标题】来自 tsconfig.json 的无服务器框架和路径映射不起作用【英文标题】:Serverless framework and path mapping from tsconfig.json don't work 【发布时间】:2019-12-03 23:45:52 【问题描述】:我在 tsconfig.json 文件中定义了这样的路径映射
"paths":
"~/*": ["./src/*"]
它适用于ts-node -r tsconfig-paths/register
,但是当涉及到借助serverless-plugin-typescript
插件从.ts
编译到.js
文件的lambda 时,它就不起作用了。
我不能再在我的 lambdas import * as db from '~/db/psql';
中这样做了。
我知道原因,没关系,但我该怎么做才能让它发挥作用。
我正在尝试切换到serverless-plugin-typescript
以将.ts
文件编译为.js
文件。之前,我使用 webpack 和 tsconfig-paths-webpack-plugin
并且有效,但我想避免使用 webpack 来编译 lambda。
【问题讨论】:
你有什么解决办法吗? 【参考方案1】:经过大量挖掘,我发现 serverless 不支持 typescript 提供的路径选项。
对于其他人来说,选项似乎是:
1) 复制代码
2) 利用 Webpack 插件覆盖 servlesss 并允许在 typescript 中设置 rootDir
3) 将您的共享模块代码符号链接到您的每个微服务目录。我编写了一个 bash 脚本,它将一个名为“_shared”的目录符号链接到一个名为“微服务”的父目录下一级的所有目录:
find microservices ! -path microservices -type d -maxdepth 1 -d -exec ln -s ../../_shared ./ \;
然后您需要将每个符号链接添加到您的 .gitignore:
/microservices/**/_shared
所以项目的工作流程是:
第一次克隆 repo 时,运行 bash 脚本来创建符号链接
当您在微服务子一级目录中时,从同一级别的符号链接中引用来自 _shared 的导入
对*** _shared 目录进行并提交所有更改
【讨论】:
以上是关于来自 tsconfig.json 的无服务器框架和路径映射不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用覆盖的全局接口运行 mocha 测试时 tsconfig.json 编译问题