0

我开始在 TypeScript 中开发 AWS Lambda 函数。我希望node_modules目录位于子目录中,以便能够管理层中的所有依赖项。所以我有以下结构:

- dependencies/            <- This will be my layer
  - nodesjs/
    - node_modules/
      ...
  - my_own_dependencies/
    ...
- src
  - blabla.ts

我使用相对进口,my_own_dependencies效果很好。

但是我无法tsc导入节点模块,无论模块是什么,我总是得到error TS2307: Cannot find module 'xxxx'. 使用相对导入也无济于事,因为如果一个模块本身依赖于另一个模块,仍然会抛出错误。

我尝试了各种compilerOptions参数组合(baseUrlpathsrootDirstsconfig.json但它们都没有真正起作用。

现在我的 tsconfig.json 看起来像这样:

{
  "compilerOptions": {
    "target": "es2019",
    "module": "commonjs"
    "strict": true,
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": {
      "*": [
        "dependencies/nodejs/node_modules"
      ]
    },
    "forceConsistentCasingInFileNames": true
  }
}

编辑:运行tsc --traceResolution blah/blah.ts输出以下内容:

Module resolution kind is not specified, using 'NodeJs'.
Loading module 'xxx' from 'node_modules' folder, target file type 'TypeScript'.
Directory '/path/to/blah/node_modules' does not exist, skipping all lookups in it.
File '/path/to/node_modules/xxx.ts' does not exist.
...
And so on until:
Directory '/node_modules' does not exist, skipping all lookups in it.

奇怪的是它说模块解析类型是未定义的,而它被明确定义为“节点” tsconfig.json...

谢谢你的帮助!

4

1 回答 1

1

好的,结果tsconfig.json在指定要编译的特定源文件时被忽略,可能我在文档中错过了...使用 Webpack 或只是运行时一切最终都很好tsc

我最终得到了以下tsconfig.json文件:

{
  "compilerOptions": {
    "target": "es2019",
    "module": "commonjs",
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "moduleResolution": "node",
    "baseUrl": "./dependencies/nodejs/node_modules",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "**/*.ts"
  ],
  "exclude": [
    "dependencies/nodejs/node_modules",
    "**/*.spec.ts"
  ]
}
于 2020-04-16T16:36:55.893 回答