2014-08-27 77 views
3

我們有一個本地NuGet源,其中包含一些僅限JS內容的軟件包。
我想將這些軟件包安裝在一個普通的JS應用程序中(我在Brackets中進行編輯,並且我根本不使用VS)。很明顯,像鮑爾這樣的人會更合適,但我不想維護兩個包裝飼料系統。使用NuGet.exe在沒有項目文件的情況下安裝/更新純內容軟件包

如果我做的是nuget install MyPackage,它會下載和解包軟件包,但不會將內容文件複製到子文件夾(實際上它會將軟件包下載到當前文件夾中)。

我可以使用nuget.exe來實際複製內容,還是必須是外部步驟?

回答

1

好的,這裏是我爲命令行更新所做的一些初始工作(如果您手動修改packages.config,這也可以用於安裝)。

它具有以下限制:

  1. 它希望你保持你的包在nuget_packages文件夾(類似於node_modules)。
  2. 您需要在該文件夾中有一個packages.config文件。
  3. 內容文件夾中,只有內容被複制,沒有安裝的運行等
  4. 如果你有相同的名稱,內容文件/文件夾的現有文件/文件夾,它被覆蓋。

代碼:

Set-StrictMode -Version 2 
$ErrorActionPreference = 'Stop' 

$packagesDirectory = (Get-Item nuget_packages) 

$packagesDirectory.GetDirectories() | % { 
    Write-Host "Deleting $_" 
    Remove-Item $_.FullName -Recurse 
} 
Write-Host "Starting nuget.exe" 
Start-Process nuget -ArgumentList "install packages.config" -WorkingDirectory nuget_packages -NoNewWindow -Wait 

$packagesDirectory.GetDirectories() | % { 
    $contentPath = Join-Path (Join-Path $packagesDirectory.Name $_) 'content' 
    if (!(Test-Path $contentPath)) { 
     return; 
    } 

    Get-ChildItem $contentPath -Exclude *.transform | % { 
     $target = $_.Name 
     if (Test-Path $target) { 
      Write-Host "Deleting $target" 
      Remove-Item $target -Recurse 
     } 

     Write-Host "Copying $(Join-Path $contentPath $_.Name) to $target" 
     Copy-Item $_.FullName -Destination $target -Recurse 
    } 
} 
0

我使用的標籤<contentFiles>與扁平化= 「true」 以下載軟件包,在根目錄下。我的Nuget軟件包包含Typescript文件。

<contentFiles> 
     <files include="cm-common/**/*" buildAction="None" flatten="true" /> 
</contentFiles> 
我最初使用 <files>標籤

,這種提取文件的位置 根/ package.name /內容/ {}文件

這可能幫助別人

相關問題