パッケージ管理@JavaScript¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Npmによる管理:Node Package Manager¶
セットアップ¶
▼ yumリポジトリから¶
# リポジトリの作成
$ curl -L https://rpm.nodesource.com/setup_<バージョン>.x | bash -
# nodejsのインストールにnpmも含まれる
$ yum install -y nodejs
package.json
ファイル¶
▼ author¶
パッケージの作成者名を設定する。
{
"author":
{
"name": "Hiroki Hasegawa",
"email": "example@gmail.com",
"url": "https://github.com/hiroki-hasegawa",
},
}
▼ bug¶
不具合の報告先のURLを設定する。
{"bugs": {"url": "https://github.com/hiroki-hasegawa/foo/issues"}}
▼ dependencies¶
本番環境と開発環境で依存するパッケージ名を設定する。
NPMに登録されていないパッケージは、『git+<GitHubリポジトリURL>
』を指定する。
npm install
コマンドの実行時に--production
オプションを有効化すると、dependencies
キーが使用される。
{
"dependencies":
{
"foo": "^1.1.1",
"bar": "^1.0.0",
"baz": "git+https://github.com/baz/baz-package.git",
},
}
▼ description¶
{"description": "This is foo package"}
▼ devDependencies¶
開発環境のみ依存するパッケージ名を設定する。
npm install
コマンドの実行時に--production
オプションを有効化しないと、devDependencies
キーが使用される。
{
"devDependencies":
{
"foo": "^1.1.1",
"bar": "^1.0.0",
"baz": "git+https://github.com/baz/baz-package.git",
},
}
▼ directories¶
パッケージのディレクトリ構造を設定する。
doc
キーでドキュメントのパス、lib
でパッケージのパスを指定する。
{"directories": {"doc": "foo/doc", "lib": "foo/lib"}}
▼ engines¶
npm
コマンドのバージョンを設定する。
使用するバージョンを強制し、他のバージョンではコマンドの実行で失敗する。
{"engines": {"node": "1.0.0", "npm": "1.0.0"}}
▼ homepage¶
パッケージを説明するWebサイトのリンクを設定する。
{"homepage": "https://example.com"}
▼ main¶
エントリポイントとなるファイルを設定する。
{"main": "index.js"}
▼ name¶
npmパッケージ名を設定する。
全てのnpmパッケージの中で、一意の名前である必要がある。
{"name": "foo"}
▼ repository¶
{
"repository":
{"type": "git", "url": "https://github.com/hiroki-hasegawa/foo.git"},
}
▼ scripts¶
汎用コマンドとエイリアスを設定する。npm run <エイリアス>
コマンドで実行できる。
{"scripts": {"foo": "npm install"}}
▼ version¶
パッケージのバージョンを設定する。
{"version": "<バージョンタグ>"}
package.lock
ファイル¶
Composerのcomposer.lock
ファイルに相当する。
01-02. npmコマンド¶
init¶
▼ package.json
ファイルの作成¶
プロジェクトのpackage.json
ファイルを作成する。
$ npm init
install¶
▼ installとは¶
アプリケーションにて、package.lock
ファイルに実装されたパッケージのうちで、インスールされていないものをインストールする。
package.lock
ファイルのおかげで、リポジトリの利用者が、npm install
の実行時に、共通のバージョンのパッケージをインストールできる。
$ npm install
指定したパッケージをインストールもできる。
$ npm install <パッケージ名>
▼ --force¶
パッケージのインストール時に、ディレクトリの実行権限不足でインストールが停止する場合がある。
これを無視してインストールを実行する。
$ npm install --force
▼ --save¶
デフォルトで有効化されている。
パッケージのインストール時に、dependencies
キーにパッケージ名とバージョンを書き込む。
$ npm install --save
▼ --save--dev¶
パッケージのインストール時に、devDependencies
キーにパッケージ名とバージョンを書き込む。
$ npm install --save--dev
update¶
▼ updateとは¶
全てのパッケージのバージョンを、package.json
ファイルの範囲内でアップグレードする。
$ npm update
run¶
▼ runとは¶
ユーザーが定義したエイリアスのコマンドを実行する。
$ npm run <エイリアス>
あらかじめ、任意のエイリアスをscripts
キー下に定義する。
エイリアスの中で、実行するコマンドのセットを定義する。
補足として、実行するコマンドの中で、再びnpm run
コマンドも定義できる。
{
# コマンド
"scripts": {
# "<エイリアス>": "<実行するコマンド>",
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
},
}
NODE_OPTIONS¶
メモリ上限を設定する。
$ export NODE_OPTIONS="--max-old-space-size=2048"
02. Yarnによる管理¶
セットアップ¶
▼ aptリポジトリから¶
$ apt-get install yarn
▼ npmレジストリから¶
$ npm install --global yarn
package.json
ファイル¶
Npmと同じ。
yarn.lock
ファイル¶
Composerのcomposer.lock
ファイルに相当する。
02-02. yarnコマンド¶
add¶
▼ addとは¶
指定したパッケージのバージョンを、package.json
ファイルを無視してインストールする。
$ yarn add <パッケージ名>@<バージョンタグ>
特定のパッケージのバージョンを検証する場合は、yarn remove
コマンドとyarn add
コマンドを使用する。
$ yarn remove foo && yarn add foo@<バージョンタグ>
▼ --dev¶
パッケージのインストール時に、devDependencies
キーにパッケージ名とバージョンを書き込む。
$ yarn add <パッケージ名>@<バージョンタグ> --dev
audit¶
▼ auditとは¶
脆弱性のあるパッケージを検出する。
$ yarn audit
▼ level¶
検出する重要度を設定する。
$ yarn audit --level critical
build¶
本番環境用アプリをビルドする。
package.json
ファイルに定義があり、実際にはフレームワークの起動コマンド (例:Next.jsならnext build
コマンド) を実行している。
$ yarn build
install¶
▼ installとは¶
指定したバージョンのパッケージを、package.json
ファイルの範囲内でインストールする。
$ yarn install <パッケージ名>@<バージョンタグ>
▼ --check-files¶
必要なパッケージがnode_modules
ディレクトリ内にインストールされているかを確認しつつ、不足があればinstall
コマンドを実行する。
$ yarn install --check-files
▼ --production¶
package.json
ファイルのdevDependencies
キーのパッケージをインストールしない。
デフォルトでfalse
である。
NODE_ENV
変数にproduction
を設定しても有効化できる。
$ yarn install --production
▼ --verbose¶
詳細な処理ログを出力する。
$ yarn install --verbose
dev¶
開発環境用アプリを起動する。
package.json
ファイルに定義があり、実際にはフレームワークの起動コマンド (例:Next.jsならnext dev
コマンド) を実行している。
lint¶
静的解析を実行する。
package.json
ファイルに定義があり、実際にはeslint
コマンドを実行している。
$ yarn lint
list¶
指定したパッケージのバージョンを取得する。
$ yarn list --depth=0 | grep <パッケージ名>
remove¶
指定したパッケージをアンインストールする。
$ yarn remove <パッケージ名>
start¶
ビルド済みの本番環境用アプリを起動する。
package.json
ファイルに定義があり、実際にはフレームワークの起動コマンド (例:Next.jsならnext start
コマンド) を実行している。
$ yarn build
upgrade¶
▼ upgradeとは¶
指定したパッケージをpackage.json
ファイルの範囲内でアップグレードする。
$ yarn upgrade <パッケージ名>@<バージョンタグ>
▼ latest¶
全てのパッケージを、package.json
ファイルを無視して最新までアップグレードする。
$ yarn upgrade --latest
03. モジュールバンドル¶
モジュールバンドルとは¶
▼ 読み込むパッケージをまとめる¶
js
ファイルを読み込むscriptタグを1つにまとめる。
html
ファイルがブラウザにレンダリングされると、JavaScriptのファイルに対するリクエスト数が減るため、Webページの読み出しが早くなる。
*例*
以下のようなhtml
ファイルがあるとする。
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>webpack tutorial</title>
</head>
<body>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
モジュールバンドルは、scriptタグでのパッケージの読み出しをまとめる。
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>webpack tutorial</title>
</head>
<body>
<!-- jQueryもバンドルされたファイル -->
<script src="js/bundle.js"></script>
</body>
</html>