【问题标题】:Is there a virtual environment for node.js?node.js 有虚拟环境吗?
【发布时间】:2011-04-08 21:13:52
【问题描述】:

我已经搜索了 wiki 模块页面,但找不到类似于 virtualenv (python) 或 rvm 的任何内容。

这里有人在自己的环境中分离 node.js 吗?我真的不喜欢在系统范围内安装 npm。

【问题讨论】:

    标签: node.js virtualenv language-comparisons


    【解决方案1】:

    如果拥有系统范围的 npm 包是您的主要问题,那么也许可以考虑在 npm 中使用非常酷的“bundle”命令。这更接近于冻结 gem 或在 rails 中使用 bundler,而不是 rvm。

    超级简单。只需创建一个 package.json 文件:

    { "name": "yourapp", "version": "0.0.1", "dependencies": {"jade": "0.4.1"}}
    

    然后运行:

    npm bundle vendor
    

    或者如果您的 npm 版本 >= 1.0 运行:

    npm install
    

    冻结到供应商目录。然后使用:

    require.paths.unshift('./vendor');
    

    【讨论】:

    • @andho 我自己没有测试过,但我知道最近版本的 NPM 只是使用 npm install
    • 现已测试并确认。我相信 npm install 在 NPM 1.0 中替换了 npm bundle
    【解决方案2】:

    还有一些 Node 版本管理系统可以提供帮助。

    查看中殿https://github.com/isaacs/nave

    NVM也可以用https://github.com/creationix/nvm

    还有一个叫nhttps://github.com/visionmedia/n

    【讨论】:

    • 如果您只想同时安装不同版本的 node.js 和 npm,Nvm 非常有用。对于其余部分,我发现使用 npm 将所需模块安装到项目目录就足够了。
    • 如果您正在查看nvmn 并希望在更改目录时自动切换,请查看avngithub.com/wbyoung/avn
    • 据我所知 n 不是虚拟环境。它仍然共享所有全局安装的库,但 npm 除外。
    【解决方案3】:

    bxjx 的答案在概念上是准确的。但是,请注意 bundle 命令不再需要目录。它总是将包放入node_modules 文件夹,以便 npm 知道以后在哪里找到它们(并且可以避免重复安装依赖项)。

    任何解决方案都可能涉及安装 npm 和 nave “系统范围”(即在您的 PATH 中,可能在某处的 ~ 中),然后只安装您的特定依赖项 在虚拟环境中。

    我回复得更彻底了on the github issue

    tl;dr:这个用例是有效且有用的,虽然它大部分都在那里,但它并没有得到应有的服务。我们应该确保考虑清楚并正确行事。

    【讨论】:

    • GitHub 问题似乎不再存在。有更新的链接吗?
    【解决方案4】:

    nodeenv - node.js 的虚拟环境(模拟 virtualenv

    【讨论】:

    • 这在开始时看起来确实不错,但我无法在编译 node.js 的同时使用 nodeenv 完成 npm 安装(在 osx Lion 上)。可能我只是可以使用 nvm install 并为每个 nodeenv 分别安装 npm ......当我想到尝试它时,我已经用其他方式完成了多个节点版本。
    • 可用于安装within现有的Python虚拟环境,以便node.js环境与Python环境一起被激活。见nodeenv -p
    • nodeenv(实际上是 virtualenv+nodeenv) 也适合 fish-shell 用户,因为 nave 和其他人不支持除 bash 和 zsh 之外的任何其他 shell。
    • 是否还有一个等效的 virtualenv-wrapper ?
    • 这到底是怎么回事,默认情况下,npm 是否在项目的节点模块文件夹中安装列出的版本(来自 package.json)?或者至少它没有选择这样做吗?这还不够分开吗?我想知道我是否真的需要安装另一个 3rd 方工具...
    【解决方案5】:

    如果你喜欢简单,我真心推荐visionmedia的n,再简单不过了!

    https://github.com/visionmedia/n

    【讨论】:

      【解决方案6】:

      看来有更好的办法:

      Installing Node.js and npm into a Python Virtualenv

      现在我可以使用节点工具而不会弄乱全局 bin 环境

      【讨论】:

        【解决方案7】:

        您并不总是需要全局安装依赖项。通常是推荐的,因为你可以使用 npm 包提供的命令,但是如果你在本地安装它(在node_modules)目录中,你也可以使用这些命令,它们只会在node_modules/.bin/ 目录中结束,所以你' 必须输入node_modules/.bin/<command>,这很烦人,但您当然可以将此路径添加到您的PATH 环境变量中:

        export PATH=node_modules/.bin:$PATH
        

        然后您只需输入<command> 即可!

        实际上有一个 npm 命令可以返回.bin 目录的绝对路径:

        $ npm bin
        /path/to/node_modules/.bin
        

        当您在项目的子目录中时,此命令也有效,它将返回在其父目录中找到的第一个 node_modules/.bin 目录。

        您可以在.bashrc 中添加此别名,以自动将.bin/ 目录添加到您的PATH

        alias nodebin='export PATH=$(npm bin):$PATH'
        

        所以当你在一个根目录下有node_modules/目录的项目目录中时,你可以输入nodebin,然后你就可以使用.bin/目录下的所有命令了!

        【讨论】:

          【解决方案8】:

          您可以使用miniconda,如here 所述。

          这允许您在单个 conda 环境中结合 python 和 nodejs 来完成与全局系统隔离的所有开发工作:

          conda create --name my_env python=3.9 nodejs
          conda activate my_env
          
          # optionally, also install yarn
          conda install -c conda-forge yarn
          
          ##############################################
          # check it works
          
          # python related
          pip --version
          python --version
          
          # nodejs related
          yarn --version
          npm --version
          node --version
          
          ##############################################
          # verify they're inside the conda environment
          
          # python related
          which pip
          which python
          
          # nodejs related
          which yarn
          which npm
          which node
          

          【讨论】:

            猜你喜欢
            • 2019-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-12-26
            • 1970-01-01
            • 1970-01-01
            • 2014-11-09
            • 2018-09-20
            相关资源
            最近更新 更多