使用 TypeScript Compiler API 时如何获取模块解析来搜索父目录?

问题描述 投票:0回答:1

我正在使用

ts-morph
生成一些代码,并且我想解析我的依赖项之一中的文件。

我尝试使用

ts.resolveModuleName
但这不会在父目录中搜索:

              const x = ts.resolveModuleName(
                "@pulumi/aws",
                "",
                project.compilerOptions.get(),
                project.getModuleResolutionHost(),
              );
              console.log(x);

日志:

{
  resolvedModule: undefined,
  failedLookupLocations: [
    'node_modules/@pulumi/aws/package.json',
    'node_modules/@pulumi/aws.ts',
    'node_modules/@pulumi/aws.tsx',
    'node_modules/@pulumi/aws.d.ts',
    'node_modules/@pulumi/aws/index.ts',
    'node_modules/@pulumi/aws/index.tsx',
    'node_modules/@pulumi/aws/index.d.ts',
    'node_modules/@types/pulumi__aws/package.json',
    'node_modules/@types/pulumi__aws.d.ts',
    'node_modules/@types/pulumi__aws/index.d.ts',
    'node_modules/@pulumi/aws/package.json',
    'node_modules/@pulumi/aws.js',
    'node_modules/@pulumi/aws.jsx',
    'node_modules/@pulumi/aws/index.js',
    'node_modules/@pulumi/aws/index.jsx'
  ],
  affectingLocations: [
    '/Users/jason/src/bottech/pulumix/packages/pulumix-aws/package.json'
  ],
  resolutionDiagnostics: undefined,
  node10Result: undefined
}

compilerOptions.moduleResolution
NodeNext

我希望它也能像使用

/Users/jason/src/bottech/pulumix/node_modules
时那样在
tsc
中显示。

我缺少什么让它像正常的分辨率算法一样工作?

node-modules typescript-compiler-api typescript-module-resolution
1个回答
0
投票

如果您为

containingFile
传递正确的路径,它就会起作用。例如:

ts.resolveModuleName(
  "@pulumi/aws",
  __filename,
  project.compilerOptions.get(),
  project.getModuleResolutionHost(),
);

您可以通过 a) 启用

traceResolution
选项和 b) 确保主机已定义
trace
方法来查看解决方案:

ts.resolveModuleName(
  "@pulumi/aws",
  __filename,
  { ...project.compilerOptions.get(), traceResolution: true },
  { ...project.getModuleResolutionHost(), trace: console.trace },
);
© www.soinside.com 2019 - 2024. All rights reserved.