NPM npm_package_main variable is always empty


NPM $npm_package_main variable is always empty.

  1. When I set the package.json file with "main": "index.js"
  2. Set the "start" property from scripts to "start": "node $npm_package_main"
  3. Then run npm start

Problem: the CLI executes the Node REPL mode, ignoring the "main" variable from package.json.

Expected behavior: execute the command as node index.js.


  • Linux Ubuntu 20.04.1
  • npm -v = 7.3.0
  • node -v = v15.5.0
  • npm run env | grep npm_package_name = npm_package_name=app
  • npm run env | grep npm_package_main = EMPTY

How to reproduce

  • Create an "app" directory and enter the new directory
  • Create an "index.js" file with the following content
  • Run npm init and hit ENTER for all questions
  • Edit the package.json file and add the following line to the "scripts" property:
    "start": "node $npm_package_main",
  • now your package.json must look like this
      "name": "app",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "devDependencies": {},
      "scripts": {
        "start": "node $npm_package_main",
        "test": "echo \"Error: no test specified\" && exit 1"
      "author": "",
      "license": "ISC"
  • Run "npm start"
  • File "index.js" is not executed and Node enters the REPL mode.


Set "start" and running "npm start" for:

  • "echo $npm_package_main" prints nothing
  • "echo $npm_package_name" prints "app"
  • "echo $npm_package_version" prints "1.0.0"


2 thoughts on “NPM npm_package_main variable is always empty”

Leave a Comment