web-dev-qa-db-ja.com

npm install:package.jsonの特定の依存関係を無視する方法はありますか

現在、ローカルの依存関係を含むnode.jsプロジェクトのdockerコンテナを作成しようとしています。これにより、dockerで問題が発生するようです。回避策として、ローカルの依存関係フォルダーをコピーし、package.jsonファイル内の依存関係エントリを無視するようにします。無視してnpmインストールを実行し、それらのエンティティをスキップしたい依存関係を指定する方法はありますか?

6
user1790300

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
10
RootHacker

これは、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はスコープパッケージを デフォルトではプライベート として扱うため、それらが時々公開されたり、明示的にプライベートとしてマークされることを心配する必要はありません。

0
Vadim