visual studio - Excluir archivos .JS transpilados/no existentes de la publicación web de TypeScript
Mientras intentaba publicar en la web un proyecto de TypeScript en Visual Studio 2015, Actualización 2; la compilación tiene éxito, pero el empaquetado/publicación falla en:
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
El error aparece cuando el proyecto especifica un directorio para los archivos intermedios/de salida de TypeScript. Para reproducir este error, simplemente cree un archivo tsconfig.json en la raíz de un nuevo proyecto de Aplicación HTML de TypeScript de Visual Studio, con el siguiente contenido:
{
"compilerOptions": {
"outDir": "transpiled"
}
}
Si no uso la opción de directorio intermedio/de salida outDir, mis archivos fuente se publican, lo cual no quiero. (Además, la salida del proyecto se mezcla con los archivos fuente y el proyecto se vuelve un desastre.)
¿Cómo puedo excluir estos archivos transpilados de TypeScript del paquete/publicación?
Dado que ejecuto WebPack para crear archivos .JS desplegables separados (que se incluyen en mi proyecto y se empaquetan/publican con éxito), en realidad no quiero que se incluyan ninguno de estos archivos transpilados de todos modos.
Investigación adicional:
Ya he intentado excluir la fuente .TS en el Explorador de Soluciones, configurándola en Ninguno/No copiar. Pero aquí está lo realmente extraño de eso:
Cualquier cambio entre "Ninguno" y "Compilar TypeScript" (configurar o desactivar) en un archivo .TS de mi proyecto permitirá que mi proyecto se publique en el servidor con éxito, y ninguno de los archivos .TS/.JS transpileados se despliega; pero solo hasta que haga otro cambio que requiera que el proyecto se construya nuevamente. Luego, el error de archivo .JS faltante vuelve a aparecer.
Entonces, efectivamente, tengo un poco de vudú que puedo realizar para forzar una publicación, pero aún así realmente me gustaría solucionar este problema.
De alguna manera, C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets llega a la línea 615 con una lista de archivos que (que yo sepa) nunca existieron en ningún momento durante el proceso de compilación o empaquetado, en la variable @(FilesForPackagingFromProject). Es como si uno de los objetivos hiciera un reemplazo directo de cualquier extensión .TS por .JS si simplemente se ejecutó la compilación, pero sin tener en cuenta lo que realmente ocurrió en la compilación.
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">
Respuesta #1
Tuve el mismo problema que tú y lo resolví usando este enfoque:
Edita el archivo .targets que está causando tu error (puedes encontrarlo en el panel de salida)
Pega en el nodo el xml proporcionado en el enlace:
<Target Name="CustomExcludeFiles" DependsOnTargets="$(ExcludeFilesFromPackageDependsOn)" BeforeTargets="ExcludeFilesFromPackage"> <Message Text="Custom exclude..." Importance="high"></Message> <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)" Encoding="utf-8" File="$(PackageLogDir)\CustomExcludeFilesBefore.txt" Lines="@(FilesForPackagingFromProject->' From:%(Identity) DestinationRelativePath:%(DestinationRelativePath) Exclude:%(Exclude) FromTarget:%(FromTarget) Category:%(Category) ProjectFileType:%(ProjectFileType)')" Overwrite="True" /> <ItemGroup> <FilesForPackagingFromProject Remove="@(FilesForPackagingFromProject)" Condition="!Exists('%(FullPath)')" /> </ItemGroup> <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)" Encoding="utf-8" File="$(PackageLogDir)\CustomExcludeFilesAfter.txt" Lines="@(FilesForPackagingFromProject->' From:%(Identity) DestinationRelativePath:%(DestinationRelativePath) Exclude:%(Exclude) FromTarget:%(FromTarget) \ Category:%(Category) ProjectFileType:%(ProjectFileType)')" Overwrite="True"/> </Target>- Guarda, reinicia tu Visual Studio y vuelve a publicar
Respuesta #2
Tuve el mismo problema. Actualicé mis herramientas de TypeScript para Visual Studio a la 2.1.4 y ahora todo está bien.
https://www.microsoft.com/en-us/download/details.aspx?id=48593
