路径映射模块分辨率(Typescript 2.0)

时间:2016-06-30 16:01:40

标签: typescript

我对路径映射模块分辨率(Typescript 2.0)有疑问。

我有一个结构https://github.com/sanex3339/javascript-obfuscator/tree/strictNullChecks

的项目

我的tsconfig.ts

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": true,
    "baseUrl": "src/",
    "paths": {
      "*": [
        "*"
      ]
    }
  }
}

在文件https://github.com/sanex3339/javascript-obfuscator/blob/dev/src/JavaScriptObfuscator.ts中设置

import { INode } from 'interfaces/nodes/INode';
import { IObfuscator } from "interfaces/IObfuscator";
import { IOptions } from 'interfaces/IOptions';
import { IOptionsPreset } from "interfaces/IOptionsPreset";

import { JavaScriptObfuscatorCLI } from 'cli/JavaScriptObfuscatorCLI';
import { Obfuscator } from 'Obfuscator';
import { Options } from 'Options';

所有接口(.d.ts扩展名)将正确导入而不会出现任何错误,但在最后3次导入时出现错误:

Can't resolve 'cli/JavaScriptObfuscatorCLI' in '/home/username/PhpstormProjects/javascript-obfuscator/src'

为什么我收到此错误以及为什么接口导入期间没有错误?

有趣的是,如果我查看跟踪分辨率日志,我会看到:

======== Resolving module 'cli/JavaScriptObfuscatorCLI' from '/home/username/PhpstormProjects/javascript-obfuscator/src/JavaScriptObfuscator.ts'. ========
Module resolution kind is not specified, using 'NodeJs'.
'baseUrl' option is set to '/home/username/PhpstormProjects/javascript-obfuscator/src', using this value to resolve non-relative module name 'cli/JavaScriptObfuscatorCLI'
'paths' option is specified, looking for a pattern to match module name 'cli/JavaScriptObfuscatorCLI'.
Module name 'cli/JavaScriptObfuscatorCLI', matched pattern '*'.
Trying substitution '*', candidate module location: 'cli/JavaScriptObfuscatorCLI'.
Loading module as file / folder, candidate module location '/home/username/PhpstormProjects/javascript-obfuscator/src/cli/JavaScriptObfuscatorCLI'.
File '/home/username/PhpstormProjects/javascript-obfuscator/src/cli/JavaScriptObfuscatorCLI.ts' exist - use it as a name resolution result.
Resolving real path for '/home/username/PhpstormProjects/javascript-obfuscator/src/cli/JavaScriptObfuscatorCLI.ts', result '/home/username/PhpstormProjects/javascript-obfuscator/src/cli/JavaScriptObfuscatorCLI.ts'
======== Module name 'cli/JavaScriptObfuscatorCLI' was successfully resolved to '/home/username/PhpstormProjects/javascript-obfuscator/src/cli/JavaScriptObfuscatorCLI.ts'. ========

1 个答案:

答案 0 :(得分:1)

你得到的错误肯定不是来自typescript,而是来自webpack。由于您使用的是webpack 2.0,因此您应该设置的相关加载器属性是modules:属性:

resolve: {
    extensions: ['.ts'],
    modules: ['./src', './node_modules']
},

我克隆了你的项目并将resolve属性设置为上面的设置,并且能够在没有问题的情况下编译项目。