webentwicklung-frage-antwort-db.com.de

Ignoriere dauerhaft eine Abhängigkeit mit Bower

Ich lade Angular, Angular-Bootstrap und bootstrap mit Bower. Bootstrap hat eine Abhängigkeit von JQuery, die in den Prozess installiert ist. Aber ich brauche nicht Es ist in meinem Projekt, da ich nur das CSS von Bootstrap verwende.

Also habe ich versucht, die Abhängigkeit von jquery dauerhaft zu entfernen

bower uninstall jquery --save

Es deinstalliert JQuery, aber das nächste Mal mache ich bower update wird erneut heruntergeladen.

Gibt es eine Möglichkeit, Bower anzuweisen, eine Abhängigkeit dauerhaft zu überspringen?

edit: Ich wünschte es gäbe so etwas:

"resolutions": {
    "jquery": "no, thanks"
}
48

Pull request # 1394 fügte offiziellen Support für diese Funktion hinzu und ist in der Bower-Version 1.6.3 und höher vorhanden. Überprüfen Sie Ihre Version mit bower -v, und Renn npm install -g bower upgraden.

Als Referenz sehen Sie bitte die .bowerrc offizielles Spezifikationsdokument . Wenn dies bei Ihnen nicht funktioniert, reichen Sie ein Problem mit bower ein weil es ein Fehler ist.

Wir benutzen es so in unserem .bowerrc wie die folgenden:

{
  "ignoredDependencies": [
    "bootstrap",
    "bootstrap-sass",
    "bootstrap-sass-official"
  ]
}
69
kross

Wir hatten eine ähnliche Situation, in der Backbone von Underscore in seiner bower.json, aber wir verwenden stattdessen Lo-Dash, sodass Bower bei jeder Installation unnötigerweise Underscore herunterzog. Wir haben automatisierte Prüfungen zur Einhaltung der Lizenzbestimmungen von Drittanbietern durchgeführt, daher wollten wir nichts, was wir nicht wirklich verwenden.

Mir ist klar, dass dies nicht genau das ist, wofür sie gedacht sind, aber Bowers install-hooks kann verwendet werden, um nicht benötigte Deps nach der Installation zu säubern (zumindest bis Bower die Art von "Nein, danke" -Auflösung erhält du hast angedeutet). In deiner .bowerrc:

{
    "directory": "app/bower_components",
    "scripts": {
        "postinstall": "rm -rf app/bower_components/underscore"
    }
}

Es ist ein bisschen hacken, aber funktioniert.

25
Jarno Rantanen

Das können Sie auch in Ihrer bower.json - Datei tun:

{
  "dependencies": {
    ...
    "bootstrap": "^3.2.0"
  }
  "overrides": {
    "bootstrap": {
      "dependencies": []
    }
  }
}

Das bedeutet: Entferne alle Abhängigkeiten von Boostrap. Dies ist das, was du willst, da jquery das einzige ist (das kannst du mit bower info bootstrap Überprüfen).

13
pierrefevrier

Fügen Sie es Ihrem .gitignore hinzu, wenn Sie Ihre Abhängigkeiten festschreiben. Ansonsten lass es wie es keinen Unterschied macht. Sie sollten nur das verwenden, was Sie brauchen, und den Rest ignorieren.

5
Sindre Sorhus

HAFTUNGSAUSSCHLUSS: Dies behebt Ihr spezielles Problem nicht, aber es hat mir geholfen, also hilft es vielleicht anderen Menschen.

Ich benutze grunt-bower-task, um die Dateien in ein lib-Verzeichnis zu ziehen. Ich wollte "angular" ausschließen und nur "angular.js" einschließen. Eine meiner Abhängigkeiten war "eckig". In meinem bower.json Ich habe jetzt:

{
  "name": "myapp",
  "version": "0.0.1",
  "dependencies": {
    "angular.js": "1.3.15",
    "angular-bootstrap": "0.13.0",
    "angular-cookies": "1.3.15",
    "angular-storage": "0.5.0",
    "angular-ui-router": "0.2.15",
    "mjolnic-bootstrap-colorpicker": "2.1"
  },
  "exportsOverride": {
    "angular": {
      "dump": "*.xxx"
    },
    "angular.js": {
      "js": [ "*.js", "*.js.map" ],
      "css": "*.css"
    }
  },
  "resolutions": {
    "angular": "1.3.15"
  }
} 

In meinem gruntfile.js Ich habe:

bower: {
    install: {
        options: {
            targetDir: './lib',
            layout: 'byType',
            install: true,
            cleanTargetDir: true,
            cleanBowerDir: false
        }
    }
},

Dies verhindert, dass die "eckigen" Dateien zum Ziel kopiert werden.

1
Steve N

Die obigen Antworten sind korrekt, aber eine zusätzliche Lösung ist die Verwendung von Wiredep, wie in dieser Antwort erläutert:

grunt-bower-install: bestimmte Komponenten ausschließen

Nach der Installation von grunt-wiredep können Sie Ihrer Grunt.js etwas Ähnliches hinzufügen, um zu verhindern, dass JQuery injiziert wird:

// Automatically inject Bower components into the app
wiredep: {
  options: {},
  app: {
    src: ['<%= my.app %>/index.html'],
    exclude: ['bower_components/jquery']
  }
},

Bower wird jquery leider immer noch herunterladen, aber zumindest können Sie sagen, dass es nicht in den HTML-Quellcode aufgenommen werden soll.

1
dustin.schultz