【问题标题】:Use variables in package.json在 package.json 中使用变量
【发布时间】:2020-07-14 08:47:33
【问题描述】:

可以使用$npm_package_[key] 访问 package.json 文件中的变量。我需要做这样的事情,但没有成功:

{
  "name": "core"
  "version": "1.0.0"
  "scripts": {
    "first": "echo $npm_package_myvariable"
    "second": "echo $npm_package_myvariable"
  }
  "myvariable": "$npm_package_name:$npm_package_version"
}

我需要在多个脚本中重用键 myvariable 的值,但出乎意料的是,打印的值是 $npm_package_name:$npm_package_version 而不是预期的 core:1.0.0

我目前正在使用:

  • nodejs版本v10.16.3
  • macOS Catalina v10.15.3

【问题讨论】:

    标签: javascript node.js npm


    【解决方案1】:

    我重点介绍了 3 种方法来做到这一点。每一种方式都是对前一种方式的增量。

    1.第一种方法

    package.json:

    {
      "name": "core"
      "version": "1.0.0"
      "scripts": {
        "start": "echo $var1"
      }
    }
    

    Start npm:

    var1=10 npm start
    

    2。第二种方法

    如果用户在运行 npm 时未能添加 var1,则第一种方法将失败。更好的方法是使用默认值

    package.json:

    {
      "name": "core"
      "version": "1.0.0"
      "scripts": {
        "start": "echo ${var1:10}"
      }
    }
    

    启动 npm:

    • var1=20 npm start : 使用传递的值
    • npm start :使用定义的默认值

    现在让我们看看最终的方法

    3.第三种方法

    如果要访问多脚本中的变量,需要npm-run-all 依赖。

    安装依赖:

    npm i -D npm-run-all
    

    package.json:

    {
      "name": "core"
      "version": "1.0.0"
      "scripts": {
        "start": "npm-run-all multi:*",
        "multi:first": "echo ${var1:-10}"
        "multi:second": "echo ${var1:-10}"
      }
    }
    

    启动 npm:

    var1=10 npm start
    

    【讨论】:

    • 如果这些是特定于操作系统的,可能值得指出,否则有人可能会无意中失去跨平台兼容性。
    【解决方案2】:

    如果您使用的是 Linux

    {
      "name": "core",
       "version": "1.0.0",
       "scripts": {
         "first": "echo $npm_package_name:$npm_package_version"
          "second": "echo $npm_package_name:$npm_package_version"
        }
    }
    

    如果您使用的是 Windows

    {
      "name": "core",
       "version": "1.0.0",
       "scripts": {
         "first": "echo %npm_package_name%:%npm_package_version%"
          "second": "echo %npm_package_name%:%npm_package_version%"
        }
    }
    

    【讨论】:

    • 感谢您的回复。你是对的,这种方式有效,并且是我目前正在使用的方式,但就最佳重用实践而言,它还不够好。让我们假设组合必须更改并且我需要添加另一个键,使用这种方法,我需要在几个地方而不是一个地方进行更改。还有其他建议吗?
    猜你喜欢
    • 2017-09-28
    • 2016-12-05
    • 2018-03-18
    • 2016-04-11
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2016-01-03
    • 2021-02-22
    相关资源
    最近更新 更多