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

t1rydlwq  于 2023-05-18  发布在  其他
关注(0)|答案(8)|浏览(375)

maven的一个特性我在package.json中错过了很多。在maven.pom文件中,您可以在父项目中定义变量,并在子项目的pom文件中使用它们。
npm里有这样的东西吗?我们正在构建模块化项目,我想集中定义依赖版本,并在相应的package.json文件中使用它们。
谢谢

y4ekin9u

y4ekin9u1#

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%

sczxawaw

sczxawaw2#

在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

ipakzgxi

ipakzgxi3#

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

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

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

ryhaxcpt

ryhaxcpt4#

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

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

zaq34kh6

zaq34kh65#

一个跨平台的解决方案,可在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上执行,而“||”在其他平台上执行。
好好享受吧

h9a6wy2h

h9a6wy2h6#

我花了一段时间才发现我的错误:
我在powershell上运行,你必须使用$env:npm_package_name${env:npm_package_name}来访问变量。

oyt4ldly

oyt4ldly7#

您可以使用${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

e1xvtsh3

e1xvtsh38#

你可以像这样传递变量:

{
    "name": "javascript",
    "config": { "filename": "test" },
    "version": "1.0.0",
    
    "scripts": {
        "build": "remotion render HelloWorld out/$npm_package_config_filename.mp4"
    }
}

相关问题