npm
の面白い事実は 略語ではない ということです。しかし、友人の間では、一般的にnode package manager
と呼ばれています。
npm
はデフォルトのnode
のインストールに付属するバイナリで、コミュニティに公開されたJavaScript/TypeScriptのパッケージを管理するためのものです。
- NPMパッケージは https://www.npmjs.com/ (the ☁️) にホストされて(そしてそこからインストールされて)います
- npmパッケージは
package.json
を使って設定されます。あなたはそれを素早くnpm init -y
で生成することができます。 - パッケージは
./node_modules
フォルダにインストールされます。あなたは通常それを.gitignore
に入れています。
あなたがアプリケーションを作っているとしても、本質的には、
package.json
はあなたのプロジェクトを同じようにパッケージにするものです。なので、project | package
の用語は交換可能です。
あなたが他の誰かの(あなたのチームの)パッケージをチェックアウトしたら、package.json
があります。それはあなたがプロジェクトを実行するために必要な依存関係のリストです。
npm install <something>
を使ってインストールできます。ほとんどの人はショートハンドnpm i <something>
を使います。例:
// Install react
npm i react
これは自動的に
react
をpackage.json
の依存関係に追加します。
devDependencies
は、開発(development)中のみプロジェクトに必要で、デプロイ後は必要ない場合の依存関係です。
typescript
は.ts -> .js
のビルド時だけ必要なものなので、普通はdevDependencies
です。あなたは通常ビルドされた.js
ファイルをデプロイします:
- 本番環境上に
- または、他の誰かのnpm packageに使ってもらうために
公開されたnpm
パッケージは世界中のセキュリティチームによってスキャンされ、問題があればnpmチームに報告されます。そして、彼らはセキュリティアドバイスを公開し、問題の詳細や、可能な修正をリリースします。一般的に修正はシンプルにパッケージをアップデートすることです。
あなたはnpm audit
を実行し、プロジェクトを監査することができます。これはパッケージやパッケージの依存関係に存在するかもしれない脆弱性をハイライトしてくれます。例:
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ jest [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ jest > jest-cli > istanbul-lib-source-maps > debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/534 │
└───────────────┴──────────────────────────────────────────────────────────────┘
一般的に問題は_development_の依存関係に見つかることに注意してください(例えば、このケースではjestです)。これらは本番デプロイの一部ではないので、あなたのアプリケーションはたいてい脆弱ではありません。しかし、良いプラクティスは、脆弱性を0
に保つことです。
単にnpm audit
(このコマンドはエラーがあれば、エラーコード1
で終了します)をあなたのデプロイの一部に追加し、あなたのプロジェクトが最新状態であることを確実にしてください。
あなたはベースのスクリプトを限られたコマンドライン引数のセットで作ることができます。例えば、これはTypeScriptコンパイラのためにtsc
を走らせるスクリプトターゲットです。
{
"scripts": {
"build": "tsc -p ."
}
}
あなたはtsc -p . -w
を実行するためにbuild:watch
ターゲットを作るか、npmにbuild
を実行するよう追加のフラグ-w
を付けて指示することができます:
{
"scripts": {
"build": "tsc -p .",
"build:watch": "npm run build -- -w"
}
}
あなたは必要なフラグを--
の後ろに渡すことができます。例えば、下記の例では、build:more
はsomething --foo -f -d --bar
と同じ効果を持ちます。
{
"scripts": {
"build": "something --foo",
"build:more": "npm run build -- -f -d --bar"
}
}
一般に公開されているいずれかのpublicなnpmパッケージを利用する際には、この区別は必要ないでしょう。法人/商用の利用者向けにpublic、privateの区別があることだけ覚えておいてください。
- パッケージはデフォルトでPublicです
- だれでもパッケージをnpmにデプロイできます
- 無料で取得できるアカウントだけが必要です
publicパッケージをダウンロードするには、アカウントは必要ありません。
これは無料でシェアするパッケージであり、npmが成功した理由の1つです🌹
もしあなたの会社/チームのためにprivateパッケージを必要とする場合は、有料プランにサインアップする必要があります。詳細はこちらです:https://www.npmjs.com/pricing
もちろんprivateパッケージをダウンロードするには、適切な権限のあるアカウントが必要です。