有没有一种方法可以自动为Node.js项目构建package.json文件


412

是否应该手动编辑package.json?像npm这样的程序难道不只是浏览文件,查看“ require”语句,然后使用该语句将必要的条目放入package.json文件中吗?有这样的程序吗?


2
直到现在,我还是手动编辑了文件:添加了我需要的每个软件包(以及最低版本)。然后运行npm link
pkyeck

22
@neuromancer您能否接受正确的答案?显然,这是一票获得38票以上的票…
Esteban

2
npmjs.org/doc/install.html,这也可以用来在安装新软件包时自动更新package.json
V31,2014年

1
@neromancer,放下您的Gibson书籍并解决此问题!:)
prasanthv

Answers:


601

npm使用package.json文件来了解您的node.js项目。

使用npm init生成的package.json文件为您服务!

它与npm捆绑在一起。在此处阅读其文档: https //docs.npmjs.com/cli/init

此外,还有一个官方工具可用于以编程方式生成此文件:https : //github.com/npm/init-package-json


9
npm init正是我一直在寻找谢谢!同样在那之后,我通常会运行npm shrinkwrap一个npm-shrinkwrap.json文件来创建文件
Jasdeep Khalsa 2013年

75
Per npm initnpm install <pkg> --save之后用于安装软件包,并将其另存为package.json文件中的依赖项。
布拉德·科赫

5
npm init从Visual Studio 2015在Package Manager控制台中运行后,它只会显示[...] Press ^C at any time to quit.并停止,而不会询问任何内容或创建json文件。我想念什么吗?
Michael Hilus,2015年

2
npmjs.com/package/npm-collect允许您收集所有已安装的模块
coderofsalvation 2015年

3
npm init --force --yes是生成此文件的一个衬板
BernhardDöbler17年6

204

首先,运行

npm init

...会问您几个问题(请先阅读此内容有关您的项目/软件包的),然后为您生成一个package.json文件。

然后,一旦有了package.json文件,请使用

npm install <pkg> --save

要么

npm install <pkg> --save-dev

...安装依赖项并将其自动附加到您package.jsondependencies列表中。

(注意:您可能需要手动调整依赖项的版本范围。)


6
似乎现在不创建package.json。win7x64 node0.10.9
atian25年

33
我完全不希望得到我的全部回答,只留下一行,改写并仍然归因于我。不管它是否过时。
nzondlo 2014年

关于npm init的特定文档在这里
shmim

1
这必须是正确的答案。您不必总是需要手动触摸package.json,它通常是自动处理的。
Sallar

1
--save在新的npm版本中不再需要
David Callanan '18

180

我只是编写了一个简单的脚本来收集./node_modules中的依赖项。目前满足我的要求。这可能会对其他人有所帮助,我在这里发布。

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();

就我而言,上面的脚本输出:

"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.

现在,您可以复制并粘贴它们。玩得开心!


39
您应该发布此为故宫模块

现在,当您收到770行时,您该怎么办?我的package.json中只有58个,包括devDependencies:-/
Sherzod

3
请注意,内置npm ls --depth=0打印机将打印几乎相同的内容(尽管不确定2012年是否如此)
jakub.g 2016年

3
这不是处理此问题的正确方法。这将输出每个模块中的每个依赖项。所以如果你的包需要包装a和包装a需求的包bc,该脚本将输出各级,因此abc这是正确的。它应该只输出a,子包将被自动解析。
Sallar

是我,还是似乎大多数答案都以为您不是从现有的系统手动复制或构建node_modules的系统开始的?有时,我会收到一个包含私有模块的项目文件夹,而我无权访问存储库。将模块放入我的存储库后,我仍然想自动重新创建项目。或者,也许我被告知要“仅复制此node_modules文件夹”。是的,是最佳实践,但是我要面对的是可能不知道自己在做什么的开发人员的现实。这有助于我开始理顺此类项目。感谢分享!
noelhx

82

npm init

创建package.json文件,然后使用

ls node_modules/ | xargs npm install --save

来填充您在node_modules文件夹中的模块。

编辑:@paldepind指出第二个命令是多余的,因为npm init现在自动添加您在node_modules /文件夹中的内容。我不知道是否一直都是这种情况,但至少现在,它在没有第二个命令的情况下仍然有效。


5
如果您没有对安装的每个模块都使用--save,则这将非常有用。

7
我发现它npm init已经基于已安装的软件包自动添加了依赖性,并且不需要运行第二条命令。
paldepind

我很高兴您可以通过这种方式依赖node_modules文件夹的名称……!
DT Rush 2015年

当使用时npm dedupe,这也非常有用。它将从模块中共享模块之间共享的依赖项,并将它们存储在node_modules目录的顶层。但这没有碰package.json!这样,您可以提交并共享重复数据删除的设置。
病原

1
事实结束后添加package.json的任何人的好答案。
凯莉·肯德尔

24

命令行

npm init

将创建package.json文件

要将依赖项下的软件包安装,更新和卸载到package.json文件中:

命令行

npm install <pkg>@* --save 

会自动将依赖项下软件包的最新版本添加到package.json文件中

例如:

npm install node-markdown@* --save

命令行

npm install <pkg> --save

还将自动将依赖项下的软件包的最新版本添加到package.json文件中

如果您需要软件包的特定版本,请使用以下命令行

npm install <pkg>@<version> --save

会自动将依赖项下的特定版本的软件包添加到package.json文件中

例如:

npm install koa-views@1.0.0 --save

如果您需要软件包的特定版本范围,请使用以下命令行

npm install <pkg>@<version range>

会自动将依赖项下的版本范围之间的软件包的最新版本添加到package.json文件中

例如:

npm install koa-views@">1.0.0 <1.2.0" --save

有关如何为软件包npm Doc编写版本的更多详细信息

命令行

npm update --save

会将软件包更新为package.json文件,并将依赖项下所有软件包的更新版本自动添加到package.json文件中

命令行

npm uninstall <pkg> --save

会自动将包从依赖项中删除到package.json文件中,并将包从node_module文件夹中删除


14

运行npm init -y使您package.json具有所有默认值。
然后,您可以进行相应的更改package.json
这样可以避免多次按enter以下命令来节省时间:npm init


6

现在,您可以通过3个简单的步骤在节点终端上使用Yeoman-Modern Web App脚手架工具

首先,您需要安装yo和其他必需的工具:

$ npm install -g yo bower grunt-cli gulp

要搭建Web应用程序,请安装generator-webapp generator:

$ npm install -g generator-webapp  // create scaffolding 

运行哟,...您都完成了:

$ yo webapp  // create scaffolding 

Yeoman可以为整个Web应用程序或Controllers and Models编写样板代码。它可以启动实时预览Web服务器进行编辑和编译。您不仅可以运行单元测试,最小化和连接代码,优化图像等等,还可以...

Yeoman(yo) -脚手架工具,提供了框架特定的脚手架生态系统,称为生成器,可用于执行前面提到的一些繁琐的任务。

Grunt / gulp-用于构建,预览和测试项目。

Bower-用于依赖性管理,因此您不再需要手动下载前端库。


5

根据Pylinux的回答,以下是Windows操作系统的解决方案,

dir node_modules > abc.txt
FOR /F %k in (abc.txt) DO npm install --save

希望能帮助到你。


您可以在abc.txt顶部键入npm install,在底部键入--save with remove new link也可以使用。
罗尼

请注意,尽管有帮助,但这可能会安装NPM软件包的错误版本,这可能会导致应用程序失败。
jarmod

1

使用命令npm init -f生成package.json文件,然后在每个命令之后使用--save,以便每个模块将自动在package.json内部进行更新,例如:npm install express --save


0

1.选择

如果您是git和GitHub用户:

    generate-packagenpm init

其他

和/或您不喜欢package.json模板,生成包或npm init

    您可以通过脚手架应用程序(如generatesailsyeoman)生成自己的模板。


2.相关性

该答案与2018年3月相关。将来,此答案中的数据可能已过时。

该答案的作者于2018年3月亲自使用了generate-package。


3.局限性

您需要使用git和GitHub来使用generate-package。


4.示范

例如,我创建空白文件夹 sasha-npm-init-vs-generate-package

4.1。产生包装

命令:

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初始化

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"
}

我认为,generate-package更简单地说,是npm init


5.定制

这将创建您自己的package.json模板,请参见generateyeoman示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.