Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将节点和/或Ruby作为NuGet包的一部分?_Ruby_Windows_Node.js_Visual Studio_Nuget - Fatal编程技术网

如何将节点和/或Ruby作为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包不是一个很好的例

用例

假设我想将Ruby Gem或Node.JS NPM包转换为NuGet包,并且我不希望包的使用者(以及构建环境)必须安装Node.JS或Ruby,我该怎么做

尤其是

如何获得/制作一个可移植的/x-copy-deployable版本的Node.JS/Ruby,我只需将其复制到包文件夹中并从中调用即可

我知道这是可行的

VisualStudioExtension和一些NuGet软件包似乎可以做到这一点,但我不能确切地告诉您需要执行哪些步骤


有什么想法/指南吗?

节点jshint包不是一个很好的例子,因为它的结构有点不合理,所以不能获得所有这些好处,但是要将外部工具集成到包管理器控制台中,需要做三件事:

  • 将相关工具添加到NuGet软件包的
    tools
    文件夹中。因此,node.exe和用户需要的其他脚本不被视为库或内容。如何使这些工具能够进行bin部署将取决于不同的堆栈,但这里有一个简单的解决方案,但本质上是

  • 名为
    tools\init.ps1
    的脚本-此脚本在其他Powershell脚本之前运行,并且每当在VS中打开解决方案时,它都需要在标题处显示这一行,因为约定(有关这些脚本的更多详细信息)

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中所做的相同的技巧。。。