Visual Studio 2015 Update 2 で TypeScript プロジェクトを Web 公開しようとしているとき。ビルドは成功しますが、パッケージ/発行は次の時点で失敗します。
Error: Copying file typescript-filename.js to obj\Release\Package\PackageTmp\typescript-filename.js failed. Could not find file 'typescript-filename.js'.
プロジェクトが TypeScript 中間/出力ファイルのディレクトリを指定すると、エラーが表示されます。このエラーを再現するtsconfig.json
には、新しい Visual Studio TypeScript HTML アプリケーション プロジェクトのルートに次の内容のファイルを作成するだけです。
{
"compilerOptions": {
"outDir": "transpiled"
}
}
中間/出力ディレクトリ オプションを使用しない場合outDir
、ソース ファイルが公開されますが、これは望ましくありません。(また、プロジェクトの出力がソースに混ざり、プロジェクトがめちゃくちゃになります。)
これらの TypeScript トランスパイル ファイルをパッケージ/パブリッシュから除外するにはどうすればよいですか?
WebPack を実行して個別のデプロイ可能な .JS バンドル ファイル (プロジェクトに含まれ、パッケージ/公開を正常に実行する) を作成するため、実際にはこれらのトランスパイルされたファイルを含めたくありません。
追加の調査:
Solution Explorer で .TS ソースを除外して、None/Do not copy に設定しようとしました。しかし、これについて本当に奇妙なことは次のとおりです。
プロジェクトの .TS ファイルで "None" と "TypeScript Compile" の間の変更(設定または設定解除)により、プロジェクトがサーバーに正常に公開され、トランスパイルされた .TS/.JS ファイルはデプロイされません。ただし、プロジェクトを再度ビルドする必要がある別の変更を行うまでのみです。その後、.JS ファイルが見つからないというエラーが再び表示されます。
つまり、事実上、公開を強制するために実行できるブードゥー教がありますが、それでもこの問題を修正したいと思っています。
どういうわけか、C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Transform\Microsoft.Web.Publishing.AspNetCompileMerge.targets
ビルドまたはパッケージングプロセス中に(AFAIK)決して存在しなかったファイルのリストを変数に含む615行目に到達します@(FilesForPackagingFromProject)
。ビルドを実行しただけの場合、ターゲットの 1 つが .TS 拡張子を .JS に直接置換するように見えますが、ビルドで実際に何が起こったかは関係ありません。
<CopyPipelineFiles PipelineItems="@(FilesForPackagingFromProject)"
SourceDirectory="$(WebPublishPipelineProjectDirectory)"
TargetDirectory="$(_PreAspnetCompileMergeSingleTargetFolder)"
SkipMetadataExcludeTrueItems="True"
UpdateItemSpec="True"
DeleteItemsMarkAsExcludeTrue ="True">