来自 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 文件。之前,我使用 webpacktsconfig-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 的无服务器框架和路径映射不起作用的主要内容,如果未能解决你的问题,请参考以下文章

tsconfig.json

使用覆盖的全局接口运行 mocha 测试时 tsconfig.json 编译问题

共享 tsconfig.json 和相对路径

tsconfig.json:在 Atom 和 VSCode 的团队中使用 TypeScript?

无法使用 tsconfig.json 缩短导入路径

Angular-cli.json 、 webpack.conf 和 tsconfig.json 之间的区别