是否可以在 package.json 中引用 属性

Is it possible to reference a property in package.json

考虑以下 package.json:

{
  "name": "expressapp",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {        
    "dev": "./node_modules/.bin/nodemon app.js"
  },
  "author": "me",
  "license": "ISC",
  "dependencies": {
    "express": "^4.13.4",
    "mongodb": "^2.1.7"
  },
  "devDependencies": {
    "nodemon": "^1.9.1"
  }
}

现在我想将我的 app.js 重命名为 index.js。因此,我必须至少在两个不同的地方编辑该名称:脚本的 main 属性 和 dev 属性。是否可以在package.json中引用main属性的值?

你可以通过environment variables

在Linux

之下
"scripts": {        
    "dev": "./node_modules/.bin/nodemon $npm_package_main"
  },

在Windows

之下
"scripts": {        
    "dev": "./node_modules/.bin/nodemon %npm_package_main%"
  },

JSON本身不支持变量

由使用 JSON 的程序决定是将任何特定模式视为变量还是以某种方式替换为其他文本。

虽然其他答案提到对变量使用 $%% 符号(依赖于 OS),但我认为您也可以通过以下方式解决您的问题:

而不是 nodemon app.js 你可以只写 nodemon .:

"main": "app.js",
"scripts": {
  "dev": "nodemon ."
}

. 也会自动解析为 app.js

如果您在 package.json 中有一个 "main": "app.js"(在任何文件夹中,无论是顶级文件夹还是子文件夹),那么任何节点进程都会将 app.js 文件识别为默认文件加载(在 require 调用中或通过 cli 执行),就像它自动 index.js 一样。

是的,您可以在执行脚本时引用 package.json 中的任何字段值。
但是有一点不同,当你在 windows 下编写 运行 脚本时,你应该使用 %npm_package_field% 而对于基于 unix 的 OS 你应该使用 $npm_package_field.
其中 field 是来自 package.json.

的字段名称

在windows下,您可以使用:

"dev": "./node_modules/.bin/nodemon %npm_package_main%"

Unix 下:

"dev": "./node_modules/.bin/nodemon $npm_package_main"