如何将节点和/或Ruby作为NuGet包的一部分?
用例 假设我想将Ruby Gem或Node.JS NPM包转换为NuGet包,并且我不希望包的使用者(以及构建环境)必须安装Node.JS或Ruby,我该怎么做 尤其是 如何获得/制作一个可移植的/x-copy-deployable版本的Node.JS/Ruby,我只需将其复制到包文件夹中并从中调用即可 我知道这是可行的 VisualStudioExtension和一些NuGet软件包似乎可以做到这一点,但我不能确切地告诉您需要执行哪些步骤如何将节点和/或Ruby作为NuGet包的一部分?,ruby,windows,node.js,visual-studio,nuget,Ruby,Windows,Node.js,Visual Studio,Nuget,用例 假设我想将Ruby Gem或Node.JS NPM包转换为NuGet包,并且我不希望包的使用者(以及构建环境)必须安装Node.JS或Ruby,我该怎么做 尤其是 如何获得/制作一个可移植的/x-copy-deployable版本的Node.JS/Ruby,我只需将其复制到包文件夹中并从中调用即可 我知道这是可行的 VisualStudioExtension和一些NuGet软件包似乎可以做到这一点,但我不能确切地告诉您需要执行哪些步骤 有什么想法/指南吗?节点jshint包不是一个很好的例
有什么想法/指南吗?节点jshint包不是一个很好的例子,因为它的结构有点不合理,所以不能获得所有这些好处,但是要将外部工具集成到包管理器控制台中,需要做三件事:
- 将相关工具添加到NuGet软件包的
文件夹中。因此,node.exe和用户需要的其他脚本不被视为库或内容。如何使这些工具能够进行bin部署将取决于不同的堆栈,但这里有一个简单的解决方案,但本质上是tools
- 名为
的脚本-此脚本在其他Powershell脚本之前运行,并且每当在VS中打开解决方案时,它都需要在标题处显示这一行,因为约定(有关这些脚本的更多详细信息)tools\init.ps1
param($installPath、$toolsPath、$package、$project)
- 用户可以运行的函数。这是一个简单的例子:
param($installPath, $toolsPath, $package, $project) function Enable-DoSomething { [CmdletBinding()] param ( [Parameter(Position=0, ValueFromPipeLine=$true)] [string] $ProjectName ) # do something cool here like invoke node.exe from under the tools dir Write-Host "Hello $ProjectName from $toolsPath" } Export-ModuleMember Enable-DoSomething
Export ModuleMember
方法可供用户使用-默认情况下,函数不可见…您可以链接到您在野外看到的NuGet软件包进行此操作吗?这一个似乎是,我认为也是Web Essentials。在我觉得NuGet软件包不够时,我写了这个问题,尽管我无法证明。我不担心调用工具或在包控制台中启用它们(想法是NuGet包可以调用Process.Start()
s NPM/gem包的代码),问题是如何创建一个可移植的运行时文件夹。你知道,如何创建portable Node.JS/Ruby runtime文件夹以包含在Tools Nuget package文件夹中。对于Ruby,您可以从中解压缩7zip存档文件,并将该文件夹添加到$PATH中。这里有一个很好的解释:步骤对于nodejs来说应该更容易,但是我无法联系npmjs.org来确认它有一个独立的二进制文件。和他们在节点jshint中所做的相同的技巧。。。