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

时间:2016-03-13 07:23:14

标签: 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"
  }
}

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

中引用main属性的值

3 个答案:

答案 0 :(得分:7)

您可以通过environment variables

完成此操作

在Linux下

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

在Windows下

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

答案 1 :(得分:3)

首先,你可以写下这个:

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

npm run dev会自动将nodemon解析为./node_modules/.bin/nodemon

其次,你实际上只写这个:

"scripts": {        
  "dev": "nodemon ."
},

.将自动解析为app.js,因为您已经指定了"main": "app.js"

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

答案 2 :(得分:1)

是的,您可以在执行脚本时引用package.json中的任何字段值。
但是有一个区别,当您在Windows下运行脚本时,应使用%npm_package_field%,而在基于Unix的操作系统上,则应使用$npm_package_field
其中fieldpackage.json的字段名称。

在Windows下,您可以使用:

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

在Unix下:

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