【问题标题】:Is there a way to automatically build the package.json file for Node.js projects有没有办法为 Node.js 项目自动构建 package.json 文件
【发布时间】:2012-04-15 05:34:28
【问题描述】:

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

【问题讨论】:

  • 直到现在,我手动编辑了文件:添加我需要的每个包(和最低版本)。然后运行npm link
  • npmjs.org/doc/install.html,这个也可以用来在安装新包的时候自动更新package.json
  • @neromancer,放下你的 Gibson 书籍并解决这个问题! :)
  • npmjs.com/package/npm-collect 正是这样做以及更多
  • 我喜欢没有人正确回答这个问题,除了一个答案在管理员审查后被删除。 OP 想知道什么会根据其代码中的 import/require 语句自动安装/保存依赖项。 NPM 包“自动安装”是 OP 正在寻找的答案。

标签: json node.js npm


【解决方案1】:

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

使用npm init为你生成package.json文件!

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

另外,您可以使用官方工具以编程方式生成此文件:https://github.com/npm/init-package-json

【讨论】:

  • 谢谢npm init 正是我想要的!另外在那之后我通常运行npm shrinkwrap 来创建一个npm-shrinkwrap.json 文件
  • Per npm init:之后使用npm install <pkg> --save 安装一个包并将其作为依赖项保存在 package.json 文件中。
  • 在 Visual Studio 2015 的包管理器控制台中运行 npm init 后,它只显示 [...] Press ^C at any time to quit. 并停止而不询问任何内容或创建 json 文件。我错过了什么吗?
  • npmjs.com/package/npm-collect 允许您收集任何已安装的模块
  • npm init --force --yes 是生成此文件的唯一方法
【解决方案2】:

首先,运行

npm init

...会问你几个关于你的项目/包的问题 (read this first),然后为你生成一个 package.json 文件。

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

npm install <pkg> --save

npm install <pkg> --save-dev

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

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

【讨论】:

  • 现在好像没有创建 package.json 。 win7x64 node0.10.9
  • 我真的不喜欢得到我的全部答案,除了一行,重写并仍然归功于我。不管它是否过时。
  • npm init 上的具体文档是here
  • 这一定是正确答案。您并不总是需要手动触摸package.json,它通常会自动处理。
  • --save 在较新的 npm 版本中不再需要
【解决方案3】:

我刚刚编写了一个简单的脚本来收集 ./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.

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

【讨论】:

  • 你应该把它发布为一个 npm 模块
  • 现在,当您返回 770 行时,您会怎么做..?我在 package.json 中只有 58 个,包括 devDependencies :-/
  • 请注意,内置 npm ls --depth=0 的打印结果或多或少相同(但不确定 2012 年是否如此)
  • 这不是处理这个问题的正确方法。这将输出每个模块中的每个依赖项。所以如果你的包需要包a,而包a需要包bc,这个脚本会输出所有级别,所以abc不是 正确。应该只输出a,子包会自动解析。
  • 是我,还是似乎大多数答案都假设您不是从 node_modules 手动复制或构建的现有系统开始?有时我收到一个项目文件夹,其中包含私有模块,但我无权访问存储库。一旦我将模块放入我的存储库中,我仍然想自动重新创建项目。或者也许我被告知“只需复制这个 node_modules 文件夹”。是的,是的,最佳实践,但我处理的是开发人员可能不知道自己在做什么的现实。这有助于我开始理顺这样的项目。感谢分享!
【解决方案4】:

npm init

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

ls node_modules/ | xargs npm install --save

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

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

【讨论】:

  • 如果您没有为安装的每个模块使用 --save,这将非常有用。
  • 我发现npm init已经根据安装的包自动添加了依赖,不需要运行第二条命令。
  • 我很高兴您能以这种方式依赖 node_modules 文件夹名称...唷!
  • 这在使用npm dedupe 时也非常有用,它将模块之间共享的依赖项从这些模块中提取出来,并将它们存储在node_modules 目录的顶层。但它不涉及package.json!有了这个,您可以提交和共享您的重复数据删除设置。
  • 对于任何事后添加 package.json 的人来说都是很好的答案。
【解决方案5】:

命令行

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 文件夹中移除包

【讨论】:

    【解决方案6】:

    运行npm init -y 使您的package.json 具有所有默认值。
    然后您可以相应地更改package.json
    通过防止在npm init 中的每个命令上按enter,这可以多次节省时间

    【讨论】:

      【解决方案7】:

      您现在可以通过 3 个简单的步骤在节点终端上使用 Yeoman - Modern Web App Scaffolding Tool

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

      $ npm install -g yo bower grunt-cli gulp
      

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

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

      运行哟...你都完成了:

      $ yo webapp  // create scaffolding 
      

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

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

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

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

      【讨论】:

        【解决方案8】:

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

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

        希望对你有帮助。

        【讨论】:

        • 要么,您可以在 abc.txt 顶部和底部键入 npm install --save 并删除新链接。
        • 请注意,这虽然有帮助,但可能会安装错误版本的 NPM 包,这可能会导致应用程序失败。
        • 使用 PowerShell 会变得更简单: ls .\node_modules\ |选择对象名称 | ForEach-Object { npm install --save }
        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

          1。选择

          如果你是 git 和 GitHub 用户:

              generate-packagenpm init 更简单。

          其他

          和/或您不喜欢 package.json 模板,即 generate-package 或 npm init generate:

              您可以通过 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 示例。

          【讨论】:

            【解决方案11】:
            npm add <package-name>
            

            以上命令会将包添加到节点模块并更新 package.json 文件

            【讨论】:

              【解决方案12】:

              简答:要将现有已安装的 npm 模块添加到不存在的 package.json,请使用

              npm init -y
              

              然后你可以做

              npm i <module-name>
              

              它会将该模块添加到package.json

              【讨论】:

                猜你喜欢
                • 2019-09-03
                • 2016-02-04
                • 1970-01-01
                • 2014-04-03
                • 1970-01-01
                • 2021-12-04
                • 2011-09-22
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多