2017-06-08 16 views
11

私はスコープ依存性を含むpackage.jsonを含むリポジトリを持っています。私は.npmignoreファイルを持っていて、dist/のすべてのファイルとサブディレクトリをホワイトリストに登録しています。問題は、別のリポジトリnpm install @private/aを実行するときにスコープ依存性がすべて含まれていることです。これには、プライベートなnpmパッケージと@uirouterのようなパブリックパッケージが含まれます。npmのインストール中にスコープされたパッケージのnode_modules /ディレクトリを無視する方法は?

package.json:

:私はそれはそれはスコープの依存関係のすべてに沿って、依存関係をインストールしている別のリポジトリ内 npm install @private/a --saveを実行するこれらの2つのファイルにもかかわらず

{ 
     "name": "@private/a", 
     "version": "1.0.0", 
     "description": "", 
     "main": "dist/index.js", 
     "scripts": { 
     "test": "echo \"Error: no test specified\" && exit 1" 
     }, 
     "repository": { 
     "type": "git", 
     "url": "git+ssh://[email protected]/private/a.git" 
     }, 
     "author": "", 
     "license": "ISC", 
     "homepage": "https://bitbucket.org/private/a#readme", 
     "devDependencies": { 
     "gulp": "^3.9.1", 
     "gulp-angular-embed-templates": "^2.3.0", 
     "gulp-concat": "^2.6.1", 
     "gulp-jshint": "^2.0.4", 
     "gulp-rename": "^1.2.2", 
     "gulp-sass": "^3.0.0", 
     "gulp-uglify": "^2.0.0", 
     "jshint": "^2.9.4" 
     }, 
     "dependencies": { 
     "@private/b": "^1.0.0", 
     "@private/c": "^1.0.0" 
     } 
    } 

.npmignore

** 
!dist/** 

/node_modules/@private/a/dist/index.js 
/node_modules/dist/css/styles.css 
/node_modules/@private/a/node_modules/@private/b 
/node_modules/@private/a/node_modules/@private/c 
package.json 

これだけである必要があります。

/node_modules/@private/a/dist/index.js 
/node_modules/dist/css/styles.css 
package.json 

どうすればこの問題を解決できますか?私は.npmignoreのさまざまなバリエーションを試しましたが、運が全くありませんでした。

+0

あなたのパッケージ '@ private/a'の実行には' @ private/b'と '@ private/c'が必要ですか? – vsenko

+0

それは '@ private/a'開発とビルド時にのみ必要ですか? – vsenko

答えて

4

.npmignoreは、あなたがしようとしているものとは関係ありません。このファイルは、npmパッケージコードのどの部分がnpmレジストリで終わるかだけを決定します。それは広告されたように働いています。

あなたの問題は、npmconfig内にあるか、古いバージョンのnpmを使用している必要があります。最新バージョンでは次のようにインストールされます。

/node_modules/@private/a/dist/index.js 
/node_modules/@private/b/... 
/node_modules/@private/c/... 
package.json 

これは最新のnpmで起きていることを確認しました。しかし、npmがネストされた構造に依存関係をインストールする時がありました。 this for exampleを参照してください。だから私はお勧めします:

  1. 最新のノードとnpmを持っていることを確認してください。
  2. npm設定が従来のバンドリングを強制していないことを確認してください。実行npm get legacy-bundling。これが偽であることを確認してください。

最新のnpmであっても、依存関係のネストが正当に発生するケースはほとんどありません。 thisを参照してください。しかし、私はあなたの問題がこれに起因していないと推測しています。空のフォルダにあるnpm install @private/aを実行するだけでテストできます。

+0

これは問題でした、ありがとう!私はnpmバージョン3を使用していましたが、バージョン5ではこれはもう問題ではありません。 – jrquick

1

依存関係をロックする必要があります。 npm shrinkwrapをチェックしてみてください。

2

ノードは、dependenciesフィールドの下に宣言されているすべての依存関係とともにパッケージファイルをインストールします。

依存関係ツリーの構築方法は、npmのどのバージョンを使用しているかによって異なります。

あなたのパッケージには依存関係が必要ない場合、それらは単にdevの依存関係であり、devDependenciesフィールドの下に安全にリストすることができます。

Dev依存関係は、npm installをプラグインディレクトリ内で実行した場合にのみインストールされます。

関連する問題