nodejs - typescript version
tsc lanza `TS2307: no se puede encontrar el módulo` para un archivo local (2)
El código base de vscode no usa rutas relativas, pero todo funciona bien para ellos
Realmente depende de su cargador de módulos. Si está utilizando systemjs
con baseurl
entonces funcionaría. VSCode utiliza su propio cargador de módulos personalizado (basado en una versión anterior de requirejs).
Recomendación
Utilice rutas relativas, ya que eso es lo que commonjs
soporta. Si mueve los archivos, obtendrá un error de tiempo de compilación de escritura (algo bueno), por lo que estará mejor que la gran mayoría de los proyectos de js puros (en npm).
Tengo un proyecto de ejemplo simple utilizando TypeScript: https://github.com/unindented/ts-webpack-example
Ejecutando tsc -p .
(con tsc
versión 1.8.10) lanza lo siguiente:
app/index.ts(1,21): error TS2307: Cannot find module ''components/counter''.
components/button/index.ts(2,22): error TS2307: Cannot find module ''shared/backbone_base_view''.
components/button/index.ts(3,25): error TS2307: Cannot find module ''shared/backbone_with_default_render''.
components/counter/index.ts(2,22): error TS2307: Cannot find module ''shared/backbone_base_view''.
components/counter/index.ts(3,25): error TS2307: Cannot find module ''shared/backbone_with_default_render''.
components/counter/index.ts(4,27): error TS2307: Cannot find module ''shared/backbone_with_subviews''.
components/counter/index.ts(5,20): error TS2307: Cannot find module ''components/button''.
Se queja de todas las importaciones de archivos locales, como las siguientes:
import Counter from ''components/counter'';
Si lo cambio a una ruta relativa, funciona, pero no quiero hacerlo, ya que me dificulta la vida al mover archivos:
import Counter from ''../components/counter'';
El código base de vscode
no usa rutas relativas, pero todo funciona bien para ellos, por lo que debo faltar algo en mi proyecto: https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14
Puedes ver mi repo de GitHub, pero en caso de que ayude, aquí está el archivo tsconfig.json
que estoy usando:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "dist"
},
"exclude": [
"dist",
"node_modules"
]
}
Lo curioso es que la construcción del proyecto a través de webpack
usando ts-loader
funciona bien, así que supongo que es solo un problema de configuración ...
@vladima respondió a este problema en GitHub :
La forma en que el compilador resuelve los módulos se controla mediante la opción moduleResolution que puede ser de
node
oclassic
(más detalles y diferencias se pueden encontrar here ). Si se omite esta configuración, el compilador trata esta configuración comonode
si el módulo escommonjs
yclassic
, de lo contrario. En su caso, si desea que la estrategia de resolución de módulosclassic
se use con los móduloscommonjs
, debe establecerla explícitamente utilizando
{ "compilerOptions": { "moduleResolution": "node" } }