Frage Wie ignoriere ich das node_modules / -Verzeichnis von Scoped Packages während der npm-Installation?


Ich habe ein Repository mit einem package.json Das enthält bereichsabhängige Abhängigkeiten. Ich habe auch eine .npmignore Datei, die alle Dateien und Unterverzeichnisse in dist/. Das Problem besteht darin, dass alle bereichsabhängigen Abhängigkeiten beim Ausführen enthalten sind npm install @private/a ein anderes Repository. Dies umfasst sowohl private npm-Pakete als auch öffentliche Pakete wie @uirouter.

Paket.json:

   {
      "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://git@bitbucket.org/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/**

Trotz dieser zwei Dateien wenn ich renne npm install @private/a --save In einem anderen Repository wird die Abhängigkeit zusammen mit allen abhängigen Abhängigkeiten installiert:

/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

Es sollte nur das sein:

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

Wie kann ich das erreichen? Ich habe verschiedene Varianten des .npmignore aber ich hatte kein Glück.


10
2018-06-08 01:59


Ursprung


Antworten:


.npmignore ist irrelevant für das, was Sie versuchen zu tun. Diese Datei entscheidet nur, welche Teile Ihres npm-Pakets in der npm-Registrierung landen. So funktioniert es wie beworben.

Ihr Problem muss in Ihrem npmconfig sein oder wegen der Verwendung einer älteren Version von npm. Die neueste Version installiert Sachen wie folgt:

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

Ich habe bestätigt, dass dies mit dem letzten npm passiert. Aber es gab eine Zeit, in der npm Abhängigkeiten in eine verschachtelte Struktur installierte. Sehen das zum Beispiel. Also schlage ich vor:

  1. Stellen Sie sicher, dass Sie den neuesten Knoten und npm haben.
  2. Stellen Sie sicher, dass Ihre npm-Konfiguration keine Legacy-Bündelung erzwingt. Lauf npm get legacy-bundling. Stellen Sie sicher, dass dies falsch ist.

Es gibt wenige Fälle, in denen die Verschachtelung von Abhängigkeiten legitim auch mit dem letzten npm passiert. Sehen Dies. Aber ich vermute, dass dein Problem nicht darauf zurückzuführen ist. Sie können testen, indem Sie einfach tun npm install @private/a in einem leeren Ordner.


3
2018-06-15 21:56



Node installiert Ihre Paketdateien zusammen mit allen unter deklarierten Abhängigkeiten dependencies Feld.

Wie der Abhängigkeitsbaum erstellt wird, hängt davon ab, welche Version von npm benutzt du.

Wenn Ihr Paket diese Abhängigkeiten nicht benötigt, bedeutet dies, dass es sich nur um Abhängigkeiten zwischen den Entwicklern handelt, und Sie können sie unter "Sicher" auflisten devDependencies Feld.

Dev-Abhängigkeiten werden nur installiert, wenn Sie eine ausführen npm install im Plugin-Verzeichnis.


2
2018-06-16 16:56



Sie müssen Ihre Abhängigkeit sperren. Vielleicht möchten Sie auschecken npm shrinkwrap.


1
2018-06-10 18:50