La función "Compilar al guardar" de TypeScript no funciona en Visual Studio 2015

83

La función "Compilar al guardar" no me funciona después de actualizar a Visual Studio 2015. Cuando hago un cambio en un .tsarchivo en mi proyecto y lo guardo, la barra de estado en la parte inferior del IDE dice Output(s) generated successfully, pero el .jsarchivo generado no no cambia.

Esto es lo que probé:

  • agregando lo siguiente al <Project>elemento raíz en my .csproj:

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
    
  • marcando y desmarcando la opción "Compilar automáticamente archivos TypeScript que no forman parte de un proyecto" en Tools -> Options -> TypeScript -> Project:

    ingrese la descripción de la imagen aquí

  • verificación dos veces para asegurarse de que "Compilar al guardar" esté marcado en las propiedades de compilación de TypeScript de mi proyecto:

    ingrese la descripción de la imagen aquí

¿Qué me estoy perdiendo?

Como nota al margen, el paso de compilación de TypeScript funciona como se esperaba cuando se activa con una compilación normal.

Amigo nathan
fuente
Asegúrese de que los archivos JS NO se actualicen realmente. Me encontré con un problema con VS2013 por un tiempo en el que la 'Vista previa de JS' no se estaba actualizando, pero los archivos JS en realidad se estaban actualizando. Abra manualmente uno para ver si el código se actualizó. La causa de esto era desconocida, pero la solución fue apagar VS y volver a abrirlo. Todavía no he intentado crear ningún archivo TS en VS2015.
Jason H
1
Lo rompieron por RTM. Vea esta pregunta stackoverflow.com/questions/31559653/…
Simon_Weaver
1
¡Trabajo cuando ejecutas Visual Studio como administrador!
alisabzevari
@alisabzevari Gracias por la sugerencia, pero ejecutar como administrador no me soluciona este problema.
Nathan Friend

Respuestas:

138

Para mí fue esta opción en tsconfig.json:

"compileOnSave": true,
"compilerOptions": { ... },

Reinicie Visual Studio para que este cambio surta efecto.

Miłosz Wierzbicki
fuente
Usando angular2, actualicé mi mecanografiado entre muchas otras cosas para rc1 y, naturalmente, todo se rompió hasta que finalmente descubrí que este era mi problema. No lo había necesitado hasta que actualicé a 1.8.10.
James
4
sí, agregue la opción en tsconfig.json y vuelva a cargar el proyecto si el proyecto está alojado en una solución VS. Luego, ts se compilará en js al guardar.
ZZZ
1
Agregar "watch": truea compilerOptionsfuncionó para mí en Visual Studio 2015 Update 2 con Typescript 1.8.29.0
Vahid Amiri
1
En algún momento alrededor de la época de TypeScript 2, Visual Studio pasó de mantener estas configuraciones en el .csprojarchivo a simplemente usar el tsconfig.json. Si la página de propiedades de TypeScript de su proyecto no está deshabilitada, probablemente significa que tiene instalada una versión anterior de las herramientas de TypeScript para Visual Studio y debe instalar microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain
32

Me encontré con este problema hoy: lo solucioné usando la nueva "watch":trueopción de compilador, también disponible a través de JSON en las versiones más recientes de TypeScript:

{
  "compilerOptions": {
    "watch": true
  }
}

Después de hacer eso, tuve que resolver otro problema relacionado con el siguiente error que apareció en la ventana de salida:

Object doesn't support property or method 'watchFile'

Resultó que mi sistema estaba usando una versión desactualizada de TypeScript (1.0.x), a pesar de que estaba seguro de que tenía uno más nuevo que venía con Visual Studio 2015 Update 1 (1.7). Si se encuentra con este problema, puede verificar fácilmente su versión de tsc escribiendo tsc -vdesde un símbolo del sistema.

Si dice 1.0.xo algo <1.7, probablemente se deba al hecho de que tiene algunas referencias antiguas en su variable de entorno PATH. Asegúrese de tener la versión 1.7 o posterior instalada comprobando dentro de su carpeta Microsoft SDK, que es la que utiliza Visual Studio para instalar los paquetes de TypeScript a medida que se actualizan:

C:\Program Files (x86)\Microsoft SDKs\TypeScript

Si no es así, actualice en consecuencia. Abra CPanel > Sistema > Avanzado > Variables de entorno , seleccione Variables del sistema y haga clic en Editar ; navegue por la lista buscando cualquier referencia a la carpeta de TypeScript, cambie uno de ellos para que apunte a su versión instalada más reciente de TypeScript ( 1.7o superior) y elimine cualquier otro duplicado. Vea también la captura de pantalla a continuación:

ingrese la descripción de la imagen aquí

Para obtener más detalles, lea esta publicación en mi blog.

Darkseal
fuente
1
Para mí en win10, el nombre en la lista era "Ruta" y no variables del sistema. Cuando selecciona eso (su valor es una cadena larga concatenada con punto y coma), y luego hace clic en editar, obtiene la ventana modal que se muestra en esta respuesta. Mi solución NO fue agregar compileroptions> watch> true, sino establecer compileOnSave> true (un paso por encima de compileroptions)
BobbyTables
1
Para mí, configurar esta opción provocó un error de compilación JsErrorScriptException (0x30001). Después de buscar, encontré este problema github.com/Microsoft/TypeScript/issues/7362 . La solución de Miłosz Wierzbicki (configuración "compileOnSave") funciona para mí, pero solo después de reiniciar VS.
fikkatra
Yo tuve el mismo problema. U y @zedd me ahorraron muchas horas. Esta publicación también es útil: ryadel.com/en/… .
Dudi
7

Solución:

Para mí, y estoy bastante seguro de que este también es el caso de otros, esto se debió a un error en tsconfig.json.

Necesita agregar "compileOnSave": verdadero. Pero en la sección global no dentro de compilerOptions.

Wrong:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "compileOnSave": true

  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Correct:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"

  },
"compileOnSave": true,
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Atentamente,

Anders Both Basechat.

Anders Ambos
fuente
6

Este problema parece haberse resuelto con la actualización más reciente de la TypeScript Language Servicesextensión.

Consulte esta respuesta para obtener instrucciones sobre cómo aplicar esta actualización.

Amigo nathan
fuente
2

En mi caso, instalé Visual Studio Community 2015 junto con VS 2012. Había estado usando Web Essentials para mecanografiar en 2012, lo que parecía entrar en conflicto con 2015.

La desinstalación de Web Essentials en 2012 solucionó el problema.

Christopher Thomas
fuente
Estoy usando VS Community y desinstalar Web Essentials me sirvió. ¡Gracias y voto a favor!
Ray
2

Con TypeScript 2 tienes que eliminar "outDir": de tu tsconfig. Solucione el error por mí en Visual Studio.

Yvan
fuente
¿Dónde está el outdir tsconfig? Thx
jay
@jay ¿No ve la opción en el archivo de configuración tsconfig.json de mecanografiado?
Yvan
1

En las propiedades del proyecto -> "Compilación de TypeScript", también puede simplemente desmarcar "No emitir resultados si se informa algún error". Tenerlo marcado parece desactivar la transpilación al guardar, donde hay un error o no.

Dominic Williams
fuente
1

No "compileOnSave": true,estaba funcionando para mí. Finalmente descubrí que Visual Studio no respeta el "compileOnSave": true,valor si está definido en otro .jsonarchivo que está extendiendo. Tiene que estar en la raíz para que funcione.

Daryl
fuente
1

localice el archivo, es decir, C: \ file.ts en su terminal/cmdy escriba

tsc file.ts -w // watches for file changes and converts on save
WasiF
fuente
1

Compruebe si tiene instalada la versión de TypeScript que está configurada en el proyecto. De alguna manera, no recibí ninguna advertencia de que no tengo TypeScript 3.7 instalado, pero la función de compilar al guardar dejó de funcionar en silencio.

Una vez que instalé TypeScript 3.7, volvió a funcionar.

cheesus
fuente
0

Exactamente el mismo problema aquí. Estoy usando Visual Studio 2015 actualización 3 y TypeScript 2.9.2.0. En herramientas / opciones / proyectos y soluciones / herramientas web externas, actualicé $ (PATH) a la segunda posición. Con todas estas configuraciones, compileOnSave: true no funciona para mí. La solución alternativa es abrir una línea de comando, ejecutar ng build --watchen el lateral y dejar que el nodo se encargue de la compilación automática

Yue Yin
fuente
0

No estoy seguro de si esto ayudará a alguien.

Pensé que estaba teniendo problemas para compilar, pero estaba compilando al guardar. Simplemente no tenía la barra de herramientas del explorador de soluciones activada para mostrar todos los archivos.

El archivo estaba allí, esperando con impaciencia ser agregado al proyecto.

ingrese la descripción de la imagen aquí

ZombieCode
fuente
0

Tuve un problema similar pero no el mismo en Visual Studio 2019

  • Mi proyecto se configuró para usar TypeScript 2.9
  • Tenía TypeScript 3.8 instalado y el código se compiló, pero no se compilaba al guardar

Instalé la versión anterior, TypeScript 2.9, reinicié VS y luego cobró vida

Tony
fuente