在 package.json 中使用变量

Sér*_*gio 7 javascript node.js npm

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

{
  "name": "core"
  "version": "1.0.0"
  "scripts": {
    "first": "echo $npm_package_myvariable"
    "second": "echo $npm_package_myvariable"
  }
  "myvariable": "$npm_package_name:$npm_package_version"
}
Run Code Online (Sandbox Code Playgroud)

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

我目前正在使用:

  • 节点版本v10.16.3
  • macOS Catalinav10.15.3

Aym*_*rif 5

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

1. 第一种方法

package.json:

{
  "name": "core"
  "version": "1.0.0"
  "scripts": {
    "start": "echo $var1"
  }
}
Run Code Online (Sandbox Code Playgroud)

Start npm:

var1=10 npm start
Run Code Online (Sandbox Code Playgroud)

2.第二种方法

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

package.json:

{
  "name": "core"
  "version": "1.0.0"
  "scripts": {
    "start": "echo ${var1:10}"
  }
}
Run Code Online (Sandbox Code Playgroud)

启动 npm:

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

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

3. 第三种方法

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

安装依赖项:

npm i -D npm-run-all
Run Code Online (Sandbox Code Playgroud)

package.json:

{
  "name": "core"
  "version": "1.0.0"
  "scripts": {
    "start": "npm-run-all multi:*",
    "multi:first": "echo ${var1:-10}"
    "multi:second": "echo ${var1:-10}"
  }
}
Run Code Online (Sandbox Code Playgroud)

启动 npm:

var1=10 npm start
Run Code Online (Sandbox Code Playgroud)