情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

NPMを使用する(2)パッケージ(package.json)の作成

2016/09/30

パッケージの作成

パッケージを作成する(すなわち、package.jsonを作成する)にはnpm initコマンドを実行します。

パッケージの名称やバージョンなどを聞かれますのでそれに答えていきます。

ただし、デフォルトの設定を使用する場合には何も入力しないでEnterキーを押します。

また、質問自体をさせないでデフォルトのpackage.jsonを作成するには-fオプションか--forceオプションか-yオプションか--yesオプションを付加します。

C:\work\node>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> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node) pack
version: (1.0.0)
description: sample
entry point: (index.js)
test command:
git repository:
keywords:
author: pizyumi
license: (ISC)
About to write to C:\work\node\package.json:

{
  "name": "pack",
  "version": "1.0.0",
  "description": "sample",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "pizyumi",
  "license": "ISC"
}


Is this ok? (yes)

C:\work\node>type package.json
{
  "name": "pack",
  "version": "1.0.0",
  "description": "sample",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "pizyumi",
  "license": "ISC"
}

ただし、package.jsonnpm initコマンドを使用せずに自分で作成しても構いません。

package.json

package.jsonでは下のようなプロパティを指定することができます。

name

パッケージ名を指定します。

パッケージ名には英小文字と-_のみしか使用できません(ただし、_を最初の文字にすることはできません)。

また、214文字以下でなければなりません。

このプロパティは必ず指定しなければなりません

version

パッケージのバージョンを指定します。

このプロパティは必ず指定しなければなりません

description

パッケージに対する説明を指定します。

この説明はnpm searchコマンドでパッケージを検索する際に使用されます。

keywords

パッケージに対するキーワードを配列として指定します。

このキーワードはnpm searchコマンドでパッケージを検索する際に使用されます。

homepage

パッケージのウェブページのアドレスを指定します。

bugs

パッケージの課題やバグに関する情報をオブジェクトとして指定します。

urlプロパティに課題又はバグ管理ページのアドレスを指定し、emailプロパティに課題又はバグ報告用の電子メールアドレスを指定します。

ただし、課題又はバグ管理ページのアドレスのみを指定する場合には文字列として指定することもできます。

license

パッケージのライセンスを指定します。

author

パッケージの作者に関する情報をオブジェクトとして指定します。

nameプロパティに名前を指定し、emailプロパティに電子メールアドレスを指定し、urlプロパティにウェブページのアドレスを指定します。

ただし、名前の後に<>で囲んで電子メールアドレスと()で囲んでウェブページのアドレスを文字列として指定することもできます。

contributors

パッケージの貢献者に関する情報をオブジェクトの配列として指定します。このオブジェクトはauthorプロパティに指定するオブジェクトと同じです。

files

パッケージに含めるファイルやフォルダのパスを配列として指定します。

ただし、下のようなファイルに関しては指定してもパッケージに含められることはありませんので注意してください。

  • .*.swp
  • ._*
  • .DS_Store
  • .git
  • .hg
  • .npmrc
  • .lock-wscript
  • .svn
  • .wafpickle-*
  • config.gypi
  • CVS
  • npm-debug.log

main

パッケージのアプリケーションやライブラリのエントリポイントとなるファイルのパスを指定します。

bin

パッケージのコマンドとして登録する実行可能ファイルをオブジェクトとして指定します。

このオブジェクトではコマンド名をプロパティ名とし、コマンドに対応する実行可能ファイルのパスをプロパティの値とします。

ただし、コマンドが1つのみであり、コマンド名がパッケージ名と同じである場合にはコマンドに対応する実行可能ファイルのパスを文字列として指定することもできます。

この設定により、パッケージをインストールすると指定したコマンドが使用できるようになります。

directories

パッケージで特定の役割を担うファイルが格納されているフォルダのパスをオブジェクトとして指定します。

libプロパティにライブラリが格納されているフォルダのパスを指定し、docプロパティにMarkdown形式のドキュメントが格納されているフォルダのパスを指定し、exampleプロパティに使用例が格納されているフォルダのパスを指定します。

repository

パッケージのリポジトリに関する情報をオブジェクトとして指定します。

typeプロパティにリポジトリの種類を指定し、urlプロパティにリポジトリのアドレスを指定します。

scripts

パッケージでイベントが発生した場合に実行するスクリプトをオブジェクトとして指定します。

このオブジェクトではイベント名をプロパティ名とし、スクリプトをプロパティの値とします。

イベントには下のようなものがあります。

  • prepublish・・・パッケージが公開される直前に発生するイベントです。
  • publish・・・パッケージが公開された直後に発生するイベントです。
  • postpublish・・・publishと同じです。
  • preinstall・・・パッケージがインストールされる直前に発生するイベントです。
  • install・・・パッケージがインストールされた直後に発生するイベントです。
  • postinstall・・・installと同じです。
  • preuninstall・・・パッケージがアンインストールされる直前に発生するイベントです。
  • uninstall・・・preuninstallと同じです。
  • postuninstall・・・パッケージがアンインストールされた直後に発生するイベントです。

スクリプトにおいてはpackage.jsonのプロパティをnpm_package_という接頭辞を付加した環境変数として参照することができます。

なお、スクリプトのリターンコードが0以外であった場合にはスクリプトのイベントに関連する作業が中断されますので注意してください。たとえば、prepublishイベントのスクリプトのリターンコードが0以外であった場合にはパッケージの公開は中断されます。

config

パッケージのスクリプトにおける設定をオブジェクトとして指定します。

dependencies

パッケージがプロダクション時に依存するパッケージをオブジェクトとして指定します。

このオブジェクトではパッケージ名をプロパティ名とし、パッケージのバージョン表記をプロパティの値とします。ただし、バージョン表記の代わりにパッケージのパスや圧縮されたパッケージ(パッケージのpackage.jsonが含まれているフォルダをgzip圧縮したtarファイル)のアドレスやパスやパッケージのGitリポジトリのアドレスを指定することもできます。

devDependencies

パッケージが開発時に依存するパッケージをオブジェクトとして指定します。このオブジェクトはdependenciesプロパティに指定するオブジェクトと同じです。

peerDependencies

パッケージが別のパッケージのプラグインである場合にそのパッケージをオブジェクトとして指定します。このオブジェクトはdependenciesプロパティに指定するオブジェクトと同じです。

bundledDependencies

パッケージが同梱するパッケージの名称を配列として指定します。

optionalDependencies

パッケージがプロダクション時に依存する、必ずしも必須ではないパッケージをオブジェクトとして指定します。このオブジェクトはdependenciesプロパティに指定するオブジェクトと同じです。

engines

パッケージが動作するNode.jsやNPMのバージョンをオブジェクトとして指定します。

nodeプロパティにパッケージが動作するNode.jsのバージョン表記を指定し、npmプロパティにNPMのバージョン表記を指定します。

os

パッケージが動作するOSの種類を識別子の配列として指定します。識別子としてはprocess.platformで得られるものを指定します。

なお、識別子の前に!を付加することによってパッケージが動作しないOSの種類を指定することもできます。

cpu

パッケージが動作するCPUのアーキテクチャを識別子の配列として指定します。識別子としてはprocess.archで得られるものを指定します。

なお、識別子の前に!を付加することによってパッケージが動作しないCPUのアーキテクチャを指定することもできます。

preferGlobal

パッケージがグローバルパッケージとしてインストールされるべきかを真偽値として指定します。

このプロパティがtrueである場合にはパッケージをローカルにインストールした際に警告が表示されます。パッケージがローカルにインストールできなくなる訳ではありませんので注意してください。

private

パッケージが公開可能であるかを真偽値として指定します。

このプロパティがtrueである場合にはパッケージが公開できなくなります。

publishConfig

パッケージの公開時に実行されるスクリプトのみにおける設定をオブジェクトとして指定します。

ファイルの除外

デフォルトではパッケージのフォルダに含まれている下のようなファイルはパッケージを構成するファイルにはなりません。

  • .*.swp
  • ._*
  • .DS_Store
  • .git
  • .hg
  • .npmrc
  • .lock-wscript
  • .svn
  • .wafpickle-*
  • config.gypi
  • CVS
  • npm-debug.log

また、パッケージのフォルダのnode_modulesフォルダに含まれるファイルも基本的にはパッケージを構成するファイルにはなりません。

また、更に追加で特定のファイルをパッケージから除外することもできます。

これには除外を適用したいフォルダに.npmignoreファイルを作成し、このフォルダの中に除外するファイルを列挙します。列挙方法は.gitignoreファイルにおける方法と同様です。.gitignoreファイルに関しては下の記事を参照してください。

また、.npmignoreファイルと同様の目的で.gitignoreファイルを使用することもできます。ただし、このファイルはNPM固有のファイルではなく、元々はGit固有のファイルであり、フォルダに.gitignoreファイルが存在する場合にはそのフォルダを含むGitリポジトリにも効力を有しますので注意してください。

ただし、.npmignoreファイルと.gitignoreファイルの両方が存在する場合には.gitignoreファイルは無視されますので注意してください。

また、下のファイルはパッケージから除外することができません。そのため、.npmignoreファイルや.gitignoreファイルに列挙されていても無視されます。

  • package.json
  • README
  • CHANGELOG
  • LICENSE
  • LICENCE

また、package.jsonfilesプロパティと.npmignoreファイルの両方に指定されているファイルはパッケージから除外されます(.npmignoreファイルにおける指定の方が優先されます)ので注意してください。

パッケージの圧縮

パッケージを圧縮するにはnpm packコマンドを実行します。

第1引数にパッケージのフォルダのパスか圧縮されたパッケージのアドレスかパスかパッケージのGitリポジトリのアドレスを指定します。

あるいは、NPMレジストリで公開されているパッケージを圧縮するにはパッケージ名を指定します。パッケージ名のみを指定すると最新のバージョンが圧縮されます。

バージョンを指定してパッケージを圧縮するにはunderscore@1.0.5underscore@"^1.0.0"のようにパッケージ名の後に@とバージョン表記を付加します。この場合、バージョン表記を満たす最新のバージョンが圧縮されます。

圧縮されたパッケージは現在のフォルダに作成されます。

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js, npm