如何在 package.json 中使用变量?

我在 package.json 中错过了 Maven 的一个特性。在 Maven。可以在父项目中定义变量,并在子项目的 pom 文件中使用它们。

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

谢谢

83680 次浏览

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

{
"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中的任何属性,在它前面加上 $npm_package,并为每个嵌套级别添加一个 _<prop>(下划线 + 属性)。

例如:

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

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

Linux/Mac: $npm_package_name${npm_package_name}

视窗: %npm_package_name%


version的访问方式如下:

Linux/Mac: $npm_package_version${npm_package_version}

视窗: %npm_package_version%

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

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

你可以使用 %npm_package_name%%npm_package_version%%npm_package_custom_key%得到它。

我花了很长时间才发现自己的错误:

我用的是你必须使用的强力弹药 $env:npm_package_name${env:npm_package_name} 来访问变量。

我将 package.json 文件作为变量导入到节点项目中,以获得对象结构,而不是使用 $npm _ package _ name。这将它从 JSON 转换为 JS 对象

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

enter image description here

可以使用 ${npm_package_variable_attribute}内联引用带字符串的变量。

下面是一个将 package.json版本(${npm_package_version})作为文件名的一部分复制文件的例子:

{
"name": "appname",
"version": "1.2.0",
"scripts": {
"upload-versioned-file": "aws s3 cp ./myfile.zip s3://my-bucket/releases/myfile-v${npm_package_version}.zip",

这将导致文件 s3://my-bucket/releases/myfile-v1.2.0.zip

一个适用于 Windows、 Mac OS X 和 Linux 的跨平台解决方案:

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

解释:

上面的“ ver”命令只存在于 Windows 上,因此在 Windows 上执行“ | |”之前的第一部分,而在“ | |”之后的部分在其他平台上执行。

好好享受吧!