maven的一个特性我在package.json中错过了很多。在maven.pom文件中,您可以在父项目中定义变量,并在子项目的pom文件中使用它们。npm里有这样的东西吗?我们正在构建模块化项目,我想集中定义依赖版本,并在相应的package.json文件中使用它们。谢谢
y4ekin9u1#
package.json中的任何属性都可以从脚本中引用,使用$npm_package作为前缀,并为每个嵌套级别添加_<prop>(下划线+属性)。示例:
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%
name
$npm_package_name
${npm_package_name}
%npm_package_name%
version
$npm_package_version
${npm_package_version}
%npm_package_version%
sczxawaw2#
在package.json中定义一个config对象:
{ "name" : "myapp", "config" : { "port" : "3000" }, ... }
然后,您可以使用$npm_package_config_port从脚本对象访问端口值
$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
ipakzgxi3#
在Windows上,您应该使用%variable_name%。例如:
%variable_name%
{ "name": "app_name", "version": "1.0.0", "custom": { "key": "any value" } }
您可以使用%npm_package_name%、%npm_package_version%和%npm_package_custom_key%获取它。
%npm_package_custom_key%
ryhaxcpt4#
我将package.json文件作为变量导入到我的节点项目中,以获取对象结构,而不是使用$npm_package_name。这会将其从JSON转换为JS对象
let package = require("./package.json");
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上执行,而“||”在其他平台上执行。好好享受吧
h9a6wy2h6#
我花了一段时间才发现我的错误:我在powershell上运行,你必须使用$env:npm_package_name或${env:npm_package_name}来访问变量。
$env:npm_package_name
${env:npm_package_name}
oyt4ldly7#
您可以使用${npm_package_variable_attribute}来引用一个与字符串内联的变量。下面是一个复制文件的示例,文件名中包含package.json版本(${npm_package_version}):
${npm_package_variable_attribute}
{ "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
s3://my-bucket/releases/myfile-v1.2.0.zip
e1xvtsh38#
你可以像这样传递变量:
{ "name": "javascript", "config": { "filename": "test" }, "version": "1.0.0", "scripts": { "build": "remotion render HelloWorld out/$npm_package_config_filename.mp4" } }
8条答案
按热度按时间y4ekin9u1#
package.json
中的任何属性都可以从脚本中引用,使用$npm_package
作为前缀,并为每个嵌套级别添加_<prop>
(下划线+属性)。示例:
在这里,
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%
sczxawaw2#
在package.json中定义一个config对象:
然后,您可以使用
$npm_package_config_port
从脚本对象访问端口值源完整的文章在这里:
http://www.marcusoft.net/2015/08/npm-scripting-configs-and-arguments.html#npm-configuration
ipakzgxi3#
在Windows上,您应该使用
%variable_name%
。例如:您可以使用
%npm_package_name%
、%npm_package_version%
和%npm_package_custom_key%
获取它。ryhaxcpt4#
我将package.json文件作为变量导入到我的节点项目中,以获取对象结构,而不是使用$npm_package_name。这会将其从JSON转换为JS对象
zaq34kh65#
一个跨平台的解决方案,可在Windows、Mac OS X和Linux上运行:
解释:
上面的“ver”命令仅存在于Windows上,因此“||“在Windows上执行,而“||”在其他平台上执行。
好好享受吧
h9a6wy2h6#
我花了一段时间才发现我的错误:
我在powershell上运行,你必须使用
$env:npm_package_name
或${env:npm_package_name}
来访问变量。oyt4ldly7#
您可以使用
${npm_package_variable_attribute}
来引用一个与字符串内联的变量。下面是一个复制文件的示例,文件名中包含
package.json
版本(${npm_package_version}
):这将生成文件
s3://my-bucket/releases/myfile-v1.2.0.zip
e1xvtsh38#
你可以像这样传递变量: