最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - NPM npm_package_main variable is always empty - Stack Overflow

programmeradmin7浏览0评论

Problem

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 mand as node index.js.

Environment

  • 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 console.log('HELLO');
  • 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.

Attempts

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"

References

  • NPM package.json variables:
  • NPM Github issue:

Problem

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 mand as node index.js.

Environment

  • 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 console.log('HELLO');
  • 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.

Attempts

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"

References

  • NPM package.json variables: https://docs.npmjs./cli/v7/using-npm/scripts
  • NPM Github issue: https://github./npm/cli/issues/2585
Share Improve this question edited Jan 31, 2021 at 17:31 jotafeldmann asked Jan 31, 2021 at 17:26 jotafeldmannjotafeldmann 80211 silver badges18 bronze badges 1
  • Yeah, you can just set "start": "node index.js" and it works, But the "$npm_package_main" is not working. That's the point. – jotafeldmann Commented Jan 31, 2021 at 17:37
Add a ment  | 

1 Answer 1

Reset to default 7
  • The official answer from NPM: use "node .". There's no official reason for this behavior, until this post.

  • According to the documentation, the "main" property contains the entrypoint for your app when is used as a module in other projects: https://docs.npmjs./cli/v7/configuring-npm/package-json#main

Solution

  • Use the "config" property instead:
{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "devDependencies": {},
  "config": {
    "main": "index.js"
  },    
  "scripts": {
    "start": "node $npm_package_config_main",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  • Run "npm start"
  • It works

References:

  • https://github./npm/cli/issues/2585
  • https://github./npm/cli/pull/2446
发布评论

评论列表(0)

  1. 暂无评论