我对路径映射模块分辨率(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'. ========
答案 0 :(得分:1)
你得到的错误肯定不是来自typescript,而是来自webpack。由于您使用的是webpack 2.0,因此您应该设置的相关加载器属性是modules:
属性:
resolve: {
extensions: ['.ts'],
modules: ['./src', './node_modules']
},
我克隆了你的项目并将resolve
属性设置为上面的设置,并且能够在没有问题的情况下编译项目。