Ho una domanda sulla risoluzione del Path Mapping Module (Typescript 2.0).Risoluzione del Path Mapping Module (Typescript 2.0)
Ho un progetto con struttura https://github.com/sanex3339/javascript-obfuscator/tree/strictNullChecks
miei tsconfig.ts
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": true,
"baseUrl": "src/",
"paths": {
"*": [
"*"
]
}
}
}
Nel file di https://github.com/sanex3339/javascript-obfuscator/blob/dev/src/JavaScriptObfuscator.ts ho impostato
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';
tutte le interfacce (.d.ts estensione) sarà correttamente importati senza errori, ma su 3 ultime importazioni ottengo un errore:
Can't resolve 'cli/JavaScriptObfuscatorCLI' in '/home/username/PhpstormProjects/javascript-obfuscator/src'
Perché ho ricevuto questo errore e perché nessun errore durante l'importazione di interfacce?
Interessante, se guardo registro di risoluzione traccia, vedrò:
======== 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'. ========
sembra strano per me. Cosa succede se si modifica la dichiarazione di importazione in: 'import {JavaScriptObfuscatorCLI} da" ./cli/JavaScriptObfuscatorCLI ";'? Forse renderlo un percorso esplicitamente relativo lo risolverebbe. – morphatic
Attualmente tutte le mie importazioni sono relative e voglio sostituirlo con importazioni assolute utilizzando la risoluzione del modulo di mappatura del percorso. Sì, con le importazioni relative tutto ok, ma questo non è quello che voglio. –
Come javascript, dattiloscritto non supporta assolutamente l'importazione dei moduli; sono solo i moduli ES6. Probabilmente esiste una regola speciale/legacy per importare definizioni di tipi per qualche motivo. Sono con te, fa schifo. – AlexG