【问题标题】:package.json for different environments?package.json 适用于不同的环境?
【发布时间】:2012-03-24 17:27:52
【问题描述】:

我有一个 node.js 应用程序,我刚刚部署到 Heroku,它依赖于 canvas 模块。但是,该模块需要 cairo 图形库和长话短说,我需要使用 this fork of canvas 中包含的预编译版本。

通常,我的 package.json 依赖项如下所示:

  "dependencies" : {
    "canvas"   :  "0.10.0",
    "express" :  "2.5.6",
    "jade" : "0.20.1"
  }

但是为了让我的应用在 Heroku 上运行,我必须从 github 中提取 fork

  "dependencies" : {
    "canvas"   :  "git://github.com/elspoono/node-canvas-heroku.git#master",
    "express" :  "2.5.6",
    "jade" : "0.20.1"
  }

是否有可能有 package.json 的“Heroku-only”版本?还是 package.json 中的另一个部分可以“覆盖”开发环境中的画布依赖项?

【问题讨论】:

  • 您是否将相同的应用程序部署到 Heroku 和其他地方?如果 Heroku 是您唯一的目标,为什么需要维护 2 个 package.json 文件?
  • 本地机器,heroku机器,但我以后可能会添加其他环境。如果其他人签出该项目,npm install 将失败,除非他们的架构与 heroku 的匹配

标签: node.js heroku npm


【解决方案1】:

有一个名为penv 的工具看起来很有前途。从他们的网站:

有时我们需要不同的 package.json 属性用于我们的不同环境,例如生产、登台和开发。 (例如:柔术部署)

使用 penv,您可以使用在 environment.json 文件中定义的属性自定义您的 package.json 文件。

其实现在就去试试。

【讨论】:

    【解决方案2】:

    从未使用过 Heroku,但 package.json 格式定义了 devDependencies 字段,请参阅Nodejitsu cheatsheet。然后用$ npm install -d安装。

    【讨论】:

    • 我不认为 devDependencies 会覆盖同一个包的不同版本,但它看起来确实有效。然而,即使没有 --dev 标志,它似乎也在使用 devDependencies。是否有它也在寻找的环境变量?
    • 您可以使用npm config set production true 或环境变量export NPM_CONFIG_PRODUCTION="true" 将npm 配置为在生产模式下运行
    • 此链接对我来说已损坏
    【解决方案3】:

    也许您可以在 Git 中使用 Heroku 特定的分支并在部署之前合并到该分支中(确保您不会合并到您的 package.json)。

    【讨论】:

    • 那么你没有部署到 Heroku ;)
    • 哈哈,摸摸。我想我可以想出一个更好的方式来表达“我希望有一种方法可以不用 git”:)
    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多