Is there a way to automatically build the package.json file for Node.js projects

后端 未结 10 894
梦毁少年i
梦毁少年i 2020-11-29 14:30

Is package.json supposed to be manually edited? Couldn\'t a program like npm just look through the files, see the \"require\" statements, and then use that to put the necess

相关标签:
10条回答
  • 2020-11-29 14:51

    The package.json file is used by npm to learn about your node.js project.

    Use npm init to generate package.json files for you!

    It comes bundled with npm. Read its documentation here: https://docs.npmjs.com/cli/init

    Also, there's an official tool you can use to generate this file programmatically: https://github.com/npm/init-package-json

    0 讨论(0)
  • 2020-11-29 14:53

    Running npm init -y makes your package.json with all the defaults.
    You can then change package.json accordingly
    This saves time many a times by preventing pressing enter on every command in npm init

    0 讨论(0)
  • 2020-11-29 14:53

    1. Choice

    If you git and GitHub user:

        generate-package more simply, than npm init.

    else

    and/or you don't like package.json template, that generate-package or npm init generate:

        you can generate your own template via scaffolding apps as generate, sails or yeoman.


    2. Relevance

    This answer is relevant for March 2018. In the future, the data from this answer may be obsolete.

    Author of this answer personally used generate-package at March 2018.


    3. Limitations

    You need use git and GitHub for using generate-package.


    4. Demonstration

    For example, I create blank folder sasha-npm-init-vs-generate-package.

    4.1. generate-package

    Command:

    D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>gen package
    [16:58:52] starting generate
    [16:59:01] √ running tasks: [ 'package' ]
    [16:59:04] starting package
    ? Project description? generate-package demo
    ? Author's name? Sasha Chernykh
    ? Author's URL? https://vk.com/hair_in_the_wind
    [17:00:19] finished package √ 1m
    

    package.json:

    {
      "name": "sasha-npm-init-vs-generate-package",
      "description": "generate-package demo",
      "version": "0.1.0",
      "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package",
      "author": "Sasha Chernykh (https://vk.com/hair_in_the_wind)",
      "repository": "Kristinita/sasha-npm-init-vs-generate-package",
      "bugs": {
        "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
      },
      "license": "MIT",
      "engines": {
        "node": ">=4"
      },
      "scripts": {
        "test": "mocha"
      },
      "keywords": [
        "generate",
        "init",
        "npm",
        "package",
        "sasha",
        "vs"
      ]
    }
    

    4.2. npm init

    D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>npm init
    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sensible defaults.
    
    See `npm help json` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install <pkg>` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    package name: (sasha-npm-init-vs-generate-package)
    version: (1.0.0) 0.1.0
    description: npm init demo
    entry point: (index.js)
    test command: mocha
    git repository: https://github.com/Kristinita/sasha-npm-init-vs-generate-package
    keywords: generate, package, npm, package, sasha, vs
    author: Sasha Chernykh
    license: (ISC) MIT
    About to write to D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package\package.json:
    
    {
      "name": "sasha-npm-init-vs-generate-package",
      "version": "0.1.0",
      "description": "npm init demo",
      "main": "index.js",
      "scripts": {
        "test": "mocha"
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
      },
      "keywords": [
        "generate",
        "package",
        "npm",
        "package",
        "sasha",
        "vs"
      ],
      "author": "Sasha Chernykh",
      "license": "MIT",
      "bugs": {
        "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
      },
      "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
    }
    
    
    Is this ok? (yes) y
    
    {
      "name": "sasha-npm-init-vs-generate-package",
      "version": "0.1.0",
      "description": "npm init demo",
      "main": "index.js",
      "scripts": {
        "test": "mocha"
      },
      "repository": {
        "type": "git",
        "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
      },
      "keywords": [
        "generate",
        "package",
        "npm",
        "package",
        "sasha",
        "vs"
      ],
      "author": "Sasha Chernykh",
      "license": "MIT",
      "bugs": {
        "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
      },
      "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
    }
    

    I think, that generate-package more simply, that npm init.


    5. Customizing

    That create your own package.json template, see generate and yeoman examples.

    0 讨论(0)
  • 2020-11-29 14:56

    use command npm init -f to generate package.json file and after that use --save after each command so that each module will automatically get updated inside your package.json for ex: npm install express --save

    0 讨论(0)
  • 2020-11-29 14:57

    I just wrote a simple script to collect the dependencies in ./node_modules. It fulfills my requirement at the moment. This may help some others, I post it here.

    var fs = require("fs");
    
    function main() {
      fs.readdir("./node_modules", function (err, dirs) {
        if (err) {
          console.log(err);
          return;
        }
        dirs.forEach(function(dir){
          if (dir.indexOf(".") !== 0) {
            var packageJsonFile = "./node_modules/" + dir + "/package.json";
            if (fs.existsSync(packageJsonFile)) {
              fs.readFile(packageJsonFile, function (err, data) {
                if (err) {
                  console.log(err);
                }
                else {
                  var json = JSON.parse(data);
                  console.log('"'+json.name+'": "' + json.version + '",');
                }
              });
            }
          }
        });
    
      });
    }
    
    main();
    

    In my case, the above script outputs:

    "colors": "0.6.0-1",
    "commander": "1.0.5",
    "htmlparser": "1.7.6",
    "optimist": "0.3.5",
    "progress": "0.1.0",
    "request": "2.11.4",
    "soupselect": "0.2.0",   // Remember: remove the comma character in the last line.
    

    Now, you can copy&paste them. Have fun!

    0 讨论(0)
  • 2020-11-29 14:58

    npm init

    to create the package.json file and then you use

    ls node_modules/ | xargs npm install --save

    to fill in the modules you have in the node_modules folder.

    Edit: @paldepind pointed out that the second command is redundant because npm init now automatically adds what you have in your node_modules/ folder. I don't know if this has always been the case, but now at least, it works without the second command.

    0 讨论(0)
提交回复
热议问题