web-dev-qa-db-fra.com

ignorer en permanence une dépendance avec bower

Je télécharge angular, angular-bootstrap et bootstrap avec bower. Bootstrap a une dépendance sur jquery qui est installé dans le processus. Mais je n'ai pas besoin dans mon projet car je n'utilise que le CSS de bootstrap.

J'ai donc essayé de supprimer définitivement la dépendance à jquery avec

bower uninstall jquery --save

Il désinstalle jquery, mais la prochaine fois que je ferai bower update, il est à nouveau téléchargé.

Existe-t-il un moyen de dire à Bower de sauter définitivement une dépendance?

edit: J'aimerais qu'il y ait quelque chose comme ça:

"resolutions": {
    "jquery": "no, thanks"
}
48
François Romain

Pull request # 1394 ajouté le support officiel pour cette fonctionnalité et est présent dans la version 1.6.3 et ultérieure de bower. Vérifiez votre version avec bower -v, et courir npm install -g bower mettre à niveau.

Pour référence, veuillez consulter le .bowerrc document de spécification officiel . Si cela ne fonctionne pas pour vous, veuillez signaler un problème avec bower car il s'agit d'un bogue.

Nous l'utilisons comme ceci dans notre .bowerrc tels que les suivants:

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

Nous avons eu une situation similaire où nous avions Backbone dépendre de Underscore dans son bower.json, mais nous utilisons Lo-Dash à sa place, donc Bower tirait inutilement vers le bas Underscore pour chaque installation. Nous avons des contrôles automatisés pour la conformité des licences tierces, donc nous ne voulions rien de ce que nous n'utilisons pas réellement.

Je me rends compte que ce n'est pas exactement ce à quoi ils sont destinés, mais Bower's install-hooks peut être utilisé pour nettoyer les dépôts inutiles après l'installation (au moins jusqu'à ce que Bower obtienne le type de résolution "non merci") vous avez laissé entendre). Dans ton .bowerrc:

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

C'est un peu un hack, mais ça marche.

25
Jarno Rantanen

Vous pouvez également faire quelque chose dans votre bower.json fichier:

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

Cela signifie: supprimez toutes les dépendances de boostrap, ce que vous voulez puisque jquery est le seul (vous pouvez vérifier avec bower info bootstrap)

13
pierrefevrier

Ajoutez-le à votre .gitignore si vous validez vos dépendances. Sinon, laissez-le car cela ne fait aucune différence. Vous devez simplement utiliser ce dont vous avez besoin et ignorer le reste.

5
Sindre Sorhus

AVERTISSEMENT: Cela ne résout pas votre problème particulier, mais il a aidé avec le mien, alors peut-être que cela aidera d'autres personnes.

J'utilise grunt-bower-task pour extraire les fichiers dans un répertoire lib. Je voulais exclure "angulaire" et inclure simplement "angulaire.js". Une de mes dépendances tirait en "angulaire". Dans mon bower.json J'ai maintenant:

{
  "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"
  }
} 

Dans mon gruntfile.js J'ai:

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

Cela empêche les fichiers "angulaires" d'être copiés vers la destination.

1
Steve N

Les réponses ci-dessus sont correctes mais une solution supplémentaire consiste à utiliser wiredep comme expliqué dans cette réponse:

grunt-bower-install: exclure certains composants

Après avoir installé grunt-wiredep, vous pouvez ajouter quelque chose de similaire à ceci dans votre Grunt.js pour empêcher l'injection de jquery:

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

Bower téléchargera toujours jquery malheureusement, mais au moins vous pouvez lui dire de ne pas être inclus dans le src HTML.

1
dustin.schultz