Node.jsプロジェクトのpackage.jsonファイルを自動的に構築する方法はありますか


412

package.jsonは手動で編集することになっていますか?npmのようなプログラムは、ファイルを調べて「require」ステートメントを確認し、それを使用してpackage.jsonファイルに必要なエントリを配置できないのでしょうか。そのようなプログラムはありますか?


2
これまでは、手動でファイルを編集していました。必要なすべてのパッケージ(および最小バージョン)を追加しました。その後、実行npm link
pkyeck

22
@neuromancer 正しい答えを受け入れてもらえますか?それは明らかに38票以上の票です...
エステバン

2
npmjs.org/doc/install.html、これは新しいパッケージのインストール中にpackage.jsonを自動的に更新するためにも使用できます
V31

1
@neromancer、ギブソンの本を置いてこれを直せ!:)
prasanthv 2014年

1
npmjs.com/package/npm-collectは、これ以上のことを正確に実行します
coderofsalvation 2015年

回答:


601

package.jsonファイルは、node.jsプロジェクトについて学習するためにnpmによって使用されます。

npm initあなたのためにpackage.jsonファイルを生成するために使用してください!

npmにバンドルされています。こちらのドキュメントをご覧ください。https//docs.npmjs.com/cli/init

また、このファイルをプログラムで生成するために使用できる公式のツールがあります:https : //github.com/npm/init-package-json


9
ありがとうnpm initは私が探していたものでした!また、その後は通常npm shrinkwrapnpm-shrinkwrap.jsonファイルを作成するために実行します
Jasdeep Khalsa 2013

75
Per npm initnpm install <pkg> --save後で使用してパッケージをインストールし、package.jsonファイルに依存関係として保存します。
Brad Koch 2013年

5
npm initVisual Studio 2015からパッケージマネージャーコンソールで実行した後、[...] Press ^C at any time to quit.何も要求したり、jsonファイルを作成したりせずに、表示および停止するだけです。何か不足していますか?
Michael Hilus

2
npmjs.com/package/npm-collectを使用すると、すでにインストールされているモジュールを収集できます
coderofsalvation 2015年

3
npm init --force --yesこのファイルを生成する1つのライナー
BernhardDöblerJun

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
私は私の答えの全体を持っていることを本当に感謝しません、1行のために保存し、書き直し、それでも私に帰属します。古くなっているかどうかにかかわらず。
nzondlo 14

npm initに関する特定のドキュメントはこちら
shmim

1
これは正解でなければなりません。常に手動でをタッチする必要はありませんpackage.json。通常は自動的に処理されます。
Sallar 2017

1
--save新しいnpmバージョンでは不要になりました
David Callanan 2018

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
これをnpmモジュールとして公開する必要があります
Ben

770行戻ったらどうしますか?devDependenciesを含むpackage.jsonに58しかない:-/
Sherzod

3
ビルトインでnpm ls --depth=0もほぼ同じように印刷されることに注意してください(ただし、2012年の場合と同じかどうかは
わかり

3
これはこれを処理する正しい方法ではありません。これにより、すべてのモジュールのすべての依存関係が出力されます。だからあなたのパッケージは、パッケージを必要とする場合a、パッケージは、aパッケージを必要とbし、cすべてのレベルなので、このスクリプトの意志の出力をabcであるではないが正しいです。出力のみaで、サブパッケージは自動的に解決されます。
Sallar 2017

それは私ですか、それともほとんどの回答は、node_modulesが手動でコピーまたはビルドされた既存のシステムから始めていないと想定しているようですか?プライベートモジュールが含まれているプロジェクトフォルダが渡され、リポジトリにアクセスできない場合があります。モジュールをMYリポジトリーに配置した後も、プロジェクトの再作成を自動化したいと思っています。あるいは、「このnode_modulesフォルダーをコピーする」ように言われるかもしれません。はい、はい、ベストプラクティスですが、私は彼らが何をしているのか知らない開発者の現実に対処します。これは、私がそのようなプロジェクトを真っすぐに始めるのに役立ちます。共有してくれてありがとう!
noelhx 2017年

82

npm init

package.jsonファイルを作成してから、

ls node_modules/ | xargs npm install --save

node_modulesフォルダーにあるモジュールを入力します。

編集:@paldepind npm initは、node_modules /フォルダーにあるものを自動的に追加するため、2番目のコマンドは冗長であることを指摘しました。これが常に当てはまるかどうかはわかりませんが、少なくとも2番目のコマンドがなくても機能します。


5
これは、インストールしたすべてのモジュールに--saveを使用していない場合に非常に役立ちます。

7
npm initインストールされたパッケージに基づいて依存関係が自動的に追加され、2番目のコマンドを実行する必要がないことがわかりました。
paldepind 2014

このようにnode_modulesフォルダー名に依存できることをうれしく思います。
DT Rush

これはnpm dedupe、を使用する場合にも非常に役立ちます。これは、モジュール間で共有される依存関係をそれらのモジュールからプルし、それらをnode_modulesディレクトリの最上位に格納します。しかし、それは触れませんpackage.json!これにより、重複排除されたセットアップをコミットして共有できます。
病原体

1
事実の後にpackage.jsonを追加する人にとっては素晴らしい答えです。
Carrie Kendall

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ドク

コマンドライン

npm update --save

パッケージをpackage.jsonファイルに更新し、依存関係にあるすべてのパッケージの更新バージョンをpackage.jsonファイルに自動的に追加します

コマンドライン

npm uninstall <pkg> --save

パッケージを依存関係からpackage.jsonファイルに自動的に削除し、node_moduleフォルダーからパッケージを削除します


14

実行npm init -yするpackage.jsonと、すべてがデフォルトになります。
その後、それにpackage.json応じて 変更できます。
これによりenternpm init


6

これで、使用することができます現代のWebアプリケーションの足場ツール-ヨーマンの簡単3つのステップを使用してノード端子に。

まず、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アプリケーション全体またはコントローラーとモデルの定型コードを記述できます。編集とコンパイルのためにライブプレビューWebサーバーを起動できます。単体テストの実行、コードの最小化と連結、画像の最適化なども可能です...

Yeoman(yo) -ジェネレーターと呼ばれるフレームワーク固有の足場のエコシステムを提供する足場ツールで、前述の面倒なタスクのいくつかを実行するために使用できます。

Grunt / gulp-プロジェクトのビルド、プレビュー、およびテストに使用されます。

Bower-依存関係の管理に使用されるため、フロントエンドライブラリを手動でダウンロードする必要はありません。


5

Pylinuxの答えに基づいて、以下はWindows OSのソリューションです、

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

それが役に立てば幸い。


どちらでも、abc.txtの上部と下部に単にnpm installと入力するだけです-新しいリンクを削除して保存することもできます。
Roni

これは役に立ちますが、誤ったバージョンのNPMパッケージをインストールする可能性があることに注意してください。これにより、アプリが失敗する可能性があります。
jarmod

1

コマンドnpm init -fを使用してpackage.jsonファイルを生成し、その後、各コマンドの後に--saveを使用して、各モジュールがexのpackage.json内で自動的に更新されるようにします:npm install express --save


0

1.選択

場合はgitとGitHubのユーザー:

    generate-packageより簡単に、よりnpm init

そうしないと

および/またはあなたはpackage.jsonテンプレートを好きではありません、それはgenerate-packageまたはnpm init generate:

    足場アプリを介して、generatesails、またはyeomanとして独自のテンプレートを生成できます。


2.関連性

この回答は2018年3月に関連しています。将来、この回答のデータは廃止される可能性があります。

この回答の作成者は、2018年3月に個人的にgenerate-packageを使用しました。


3.制限

generate-packageを使用するには、gitとGitHubを使用する必要があります。


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

私は、考えてgenerate-packageいることを、より簡単にnpm init


5.カスタマイズ

独自のpackage.jsonテンプレートを作成します。生成ヨーマンの例を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.