【问题标题】:How can I use variables in package.json?如何在 package.json 中使用变量?
【发布时间】:2017-09-28 01:08:22
【问题描述】:

在 package.json 中有一个我非常想念的 maven 功能。在 maven .pom 文件中,您可以在父项目中定义变量并在子项目的 pom 文件中使用它们。

在 npm 中有这样的东西吗?我们正在构建模块化项目,我想集中定义依赖版本,并将它们用于各自的 package.json 文件中。

谢谢

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    package.json 中的任何属性都可以从脚本中引用,在其前面加上 $npm_package 并为每个嵌套级别添加 _<prop>(下划线 + 属性)。

    例子:

    { 
      "name": "appname",
      "version": "0.0.1"
    }
    

    在这里,name 可以访问如下:

    Linux/Mac:$npm_package_name${npm_package_name}

    Windows:%npm_package_name%


    并且,version 可以通过如下方式访问:

    Linux/Mac:$npm_package_version${npm_package_version}

    Windows:%npm_package_version%

    【讨论】:

    • 对于 Windows,它应该是 %npm_package_name%
    • 我猜没有跨平台的东西?
    • 那么(真实的例子,现在)怎么样:copy ../foo/web-$npm_package_version_SNAPSHOT(我需要以某种方式分别将变量与之前/之后的固定部分粘合在一起,因为_SNAPSHOT 是固定的文本,而我要使用的 package.json 版本是动态的...)
    • @FrankNocke 我猜你可以用花括号来分隔变量(即:copy ../foo/web-${npm_package_version}_SNAPSHOT
    • 显然我遇到Invalid vscode engine compatibility version '^${npm_package_config_min_vscode}' 这个扩展至少有一个地方不起作用
    【解决方案2】:

    我将 package.json 文件作为变量导入到我的节点项目中以获取对象结构,而不是使用 $npm_package_name。这会将其从 JSON 转换为 JS 对象

    let package = require("./package.json");
    

    【讨论】:

    • 跨平台答案。 ?
    【解决方案3】:

    我花了一段时间才发现我的错误:

    我在你必须使用的 powershell 上运行 $env:npm_package_name${env:npm_package_name} 在那里访问变量。

    【讨论】:

      【解决方案4】:

      在 package.json 中定义一个配置对象:

      {
          "name"   : "myapp",
          "config" : { "port" : "3000" },
          ...
      }
      

      然后你可以使用$npm_package_config_port从脚本对象访问端口值

      {
          "name"   : "myapp",
          "config" : { "port" : "3000" },
          "scripts": {
              "start" : "node --harmony app.js $npm_package_config_port"
          },
          ...
      }
      

      源全文在这里:

      http://www.marcusoft.net/2015/08/npm-scripting-configs-and-arguments.html#npm-configuration

      【讨论】:

      • 不幸的是,它只允许在 package.json 的“脚本”部分使用变量。
      【解决方案5】:

      在 Windows 上,您应该使用 %variable_name%。例如:

      {
         "name": "app_name",
         "version": "1.0.0",
         "custom": {
            "key": "any value"
         }
      }
      

      您可以使用%npm_package_name%%npm_package_version%%npm_package_custom_key% 获取它。

      【讨论】:

        猜你喜欢
        • 2016-04-11
        • 2020-07-14
        • 2023-02-23
        • 1970-01-01
        • 2016-12-05
        • 2018-03-18
        • 2021-05-13
        • 2019-05-27
        • 2021-11-12
        相关资源
        最近更新 更多