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

jst*_*all 5 node.js 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

zan*_*ngw 9

您可以通过环境变量来完成

在Linux下

"scripts": {        
    "dev": "./node_modules/.bin/nodemon $npm_package_main"
  },
Run Code Online (Sandbox Code Playgroud)

在Windows下

"scripts": {        
    "dev": "./node_modules/.bin/nodemon %npm_package_main%"
  },
Run Code Online (Sandbox Code Playgroud)

  • 如果有一种适用于任何操作系统的方法,那将是很好的. (2认同)

lag*_*lex 5

JSON 本身不支持变量。

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

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

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

"main": "app.js",
"scripts": {
  "dev": "nodemon ."
}
Run Code Online (Sandbox Code Playgroud)

.也将自动解析为app.js

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

  • 这完全不是他们所要求的 (3认同)