2016-06-30 13 views
9

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'. ======== 
+0

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

+0

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. –

+0

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

risposta

1

L'errore che si stanno ottenendo non è sicuramente da dattiloscritto, ma da webpack. Dal momento che si sta utilizzando webpack 2.0 la proprietà loader rilevante è necessario impostare la proprietà è modules::

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

ho clonato il progetto e impostare la proprietà resolve per la messa a punto di cui sopra ed è stato in grado di compilare il progetto wihtout problemi.

Problemi correlati