operator nodejs example español ejemplos typescript

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 o classic (más detalles y diferencias se pueden encontrar here ). Si se omite esta configuración, el compilador trata esta configuración como node si el módulo es commonjs y classic , de lo contrario. En su caso, si desea que la estrategia de resolución de módulos classic se use con los módulos commonjs , debe establecerla explícitamente utilizando

{ "compilerOptions": { "moduleResolution": "node" } }