最奇怪的事情正在发生。我使用的是打字稿,并不是我的所有打字稿文件都在一个目录下被编译,也就是说,我的源代码树中有一个目录,其中一些.ts文件被编译为.js,而其他文件没有。 >
当我运行简单的tsc时,所有文件都会被编译,但是当我运行“无服务器脱机启动”时,并不是所有文件都会被编译。
有人知道如何解决吗?
我的serverless.yml的基础:
package:
include:
- src/**/*
functions:
graphql:
handler: src/graphql.handler
events:
- http:
path: graphql
method: post
cors: true
plugins:
- serverless-plugin-typescript
- serverless-offline
tsconfig.json:
{
"compilerOptions": {
/* Basic Options */
"target": "es2016", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"lib": [
"es2016",
"dom",
"esnext.asynciterable"
],
"removeComments": true, /* Do not emit comments to output. */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
"strictNullChecks": true, /* Enable strict null checks. */
"strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */
"noUnusedLocals": true, /* Report errors on unused locals. */
"noUnusedParameters": false, /* Report errors on unused parameters. */
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
"experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
"emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
},
"include": [
"src/**/*"
],
"types": [
"typePatches",
"nodes"
]
}
答案 0 :(得分:2)
serverless-plugin-typescript
插件仅从从无数函数处理程序获取的根文件(在您的情况下为src / graphql.handler)和根文件src / graphql.ts开始编译ts。在依赖链中未引用的所有文件都将被忽略。
无服务器package.include
选项只是另外复制了专用位置,而没有ts编译。
因此,如果您错过了.build目录中的某些文件,请确保将其导入到处理程序中的某个位置。当某些lib从诸如./some_dir/*.ts
之类的已配置glob动态加载文件时,我遇到了类似的问题(我记得typeorm实体或迁移)。解决方法是制作./some_dir/index.ts
并导出此目录中的所有文件。然后在您的处理程序中import * as all_some_dir from './some_dir'
。