現在、ローカルの依存関係を含むnode.jsプロジェクトのdockerコンテナを作成しようとしています。これにより、dockerで問題が発生するようです。回避策として、ローカルの依存関係フォルダーをコピーし、package.jsonファイル内の依存関係エントリを無視するようにします。無視してnpmインストールを実行し、それらのエンティティをスキップしたい依存関係を指定する方法はありますか?
devDependencies を使用して実行できます
開発にのみ必要なnpmモジュール(例:単体テスト、CoffeescriptからJavascriptへのトランスピレーション、ミニファイなど)は、必要なモジュールをdevDependencyにします。
DevDepenenciesのインストールをスキップするには、--production
フラグからnpm install
、とともに --production
フラグ(またはNODE_ENV
環境変数をproduction
に設定すると、npm
はdevDependenciesにリストされているモジュールをインストールしません。
npm install --production
モジュールをdevDependenciesの一部にするには、インストール中に--devを渡します。
npm install packagename --save-dev
これは、Dockerだけでなく、一部のクラウド展開でも一般的な問題です。たとえば、標準のNode.jsビルドパックを使用してCloudFoundryにデプロイすると、npm install
/yarn
とにかく実行します。そのため、ローカルモジュールを操作するためにいくつかのトリックを適用する必要もあります。
依存関係管理のためにNPMからYarnに切り替えることを気にしない場合は、 workspaces 機能を使用できます。
俺の package.json
は次のようになります。
{
...
"dependencies": {
"some-module-i-want-to-install": "1.0.0",
"another-module-i-want-to-install": "1.0.0",
"@my/local-dependency-one": "1.0.0",
"@my/local-dependency-two": "1.0.0"
},
"workspaces": ["packages/*"]
}
そして、プロジェクトのソースレイアウトは次の構造になっています。
.
├── index.js
├── package.json
├── packages
│ ├── local-dependency-one
│ │ ├── index.js
│ │ └── package.json
│ └── local-dependency-two
│ ├── index.js
│ └── package.json
└── yarn.lock
yarn
を実行した後、インストールするモジュールがNPMレジストリから取得され、ローカルの依存関係がpackages
ディレクトリからnode_modules
。
.
├── index.js
├── node_modules
│ ├── @my
│ │ ├── local-dependency-one
│ │ │ └── ...
│ │ └── local-dependency-two
│ │ └── ...
│ ├── another-module-i-want-to-install
│ │ └── ...
│ └── some-module-i-want-to-install
│ └── ...
├── package.json
├── packages
│ ├── local-dependency-one
│ │ └── ...
│ └── local-dependency-two
│ └── ...
└── yarn.lock
ご覧のとおり、ローカルパッケージを scoped (@my/...
)。必須ではありませんが、ベストプラクティスです。 NPMはスコープパッケージを デフォルトではプライベート として扱うため、それらが時々公開されたり、明示的にプライベートとしてマークされることを心配する必要はありません。