постоянно игнорировать зависимость с Bower

Я загружаю angular, angular-bootstrap и bootstrap с беседкой. Bootstrap имеет зависимость от jquery, который устанавливается в процессе. Но мне это не нужно в моем проекте, так как я использую только css bootstrap.

Поэтому я попытался навсегда удалить зависимость от jquery с помощью

bower uninstall jquery --save

Он удаляет jquery, но в следующий раз, когда я делаю bower update, он загружается снова.

Есть ли способ сказать Bower навсегда пропустить зависимость?

редактировать: я бы хотел, чтобы было что-то вроде этого:

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

person François Romain    schedule 05.01.2014    source источник


Ответы (6)


Запрос на включение #1394 добавил официальную поддержку для этой функции и присутствует в версии Bower 1.6. .3 и позже. Проверьте свою версию с помощью bower -v и запустите npm install -g bower для обновления.

Для справки см. .bowerrc официальный документ спецификации. Если это не работает для вас, пожалуйста, сообщите о проблеме в Bower, потому что это ошибка.

Мы используем это так в нашем .bowerrc, например:

{
  "ignoredDependencies": [
    "bootstrap",
    "bootstrap-sass",
    "bootstrap-sass-official"
  ]
}
person kross    schedule 06.01.2015
comment
Это еще не объединено? - person Vic; 05.06.2015
comment
Я могу подтвердить, что я также получаю эту проблему с PR, так что это даже не полное решение - github.com/bower/bower/pull/1394#issuecomment-73864285 - person streetlogics; 09.06.2015
comment
Это не работает в Bower 1.7.0, мне помог ответ @pierrefevrier stackoverflow.com/a/32016391/232342 - person Ivan Kaplin; 16.01.2016
comment
@IvanKaplin у меня все еще работает, возможно, у вас другая проблема. Мой ответ не является обходным путем. Это поддерживаемая функция Bower, если она не работает, я предлагаю вам сообщить о проблеме в Bower вместо того, чтобы отрицать этот ответ. - person kross; 19.01.2016
comment
Что касается того, что это не работает в 1.7.0, у меня была аналогичная проблема с тем, что оно не работало в 1.7.4 (IIRC, сейчас я обновился до 1.8.0). Обратите внимание, что последующий дефект, связанный с этой функцией, появился в более позднем выпуске: github.com/bower/ беседка/вопросы/1962 - person Kyle; 09.03.2017

У нас была аналогичная ситуация, когда Backbone зависел от Underscore в своем bower.json, но вместо него мы использовали Lo-Dash, поэтому Bower без необходимости отключал Underscore для каждой установки. У нас есть автоматизированные проверки на соответствие сторонним лицензиям, поэтому нам не нужно ничего, что мы на самом деле не используем.

Я понимаю, что это не совсем то, для чего они предназначены, но install-hooks от Bower можно использовать для очистки ненужных отложений после установки (по крайней мере, до тех пор, пока Bower не получит своего рода разрешение «нет, спасибо», на которое вы намекали). В вашем .bowerrc:

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

Это немного взломать, но работает.

person Jarno Rantanen    schedule 25.04.2014
comment
Интересное решение! Но это не решает проблему использования таких инструментов, как wiredep, без его настройки :( - person stevemao; 21.11.2014

Что-то, что вы можете сделать также в своем файле bower.json:

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

Это означает: удалите все зависимости boostrap, что вам и нужно, поскольку jquery — единственный (вы можете проверить с помощью bower info bootstrap)

person pierrefevrier    schedule 14.08.2015
comment
Это на самом деле не поддерживается Бауэром, не так ли? - person JKillian; 17.09.2015
comment
Насколько я могу судить, это еще не часть спецификации: github.com /bower/bower.json-spec/pull/27 - person JKillian; 17.09.2015
comment
Нужна ли для этого какая-то конкретная версия Bower? У меня последняя версия 1.7.1 и это не работает. - person Riina; 19.12.2015

Добавьте его в свой .gitignore, если вы фиксируете свои зависимости. В противном случае оставьте это, так как это не имеет значения. Вы должны просто использовать то, что вам нужно, и игнорировать остальное.

person Sindre Sorhus    schedule 06.01.2014
comment
Я уже не фиксирую зависимости. так что я понимаю, что пропустить это невозможно, и я оставлю это так. Спасибо - person François Romain; 06.01.2014
comment
Я не думаю, что это путь... термоусадочная пленка очень нужна - person stevemao; 21.11.2014
comment
Это имеет значение, когда вы объединяете свои скрипты, но хотите исключить библиотеки, которые загружаются из CDN. Я установил библиотеку angular через Bower, которую я связываю с моим js-приложением, но я работаю с angular через Google CDN. То, что Bower игнорирует эту зависимость, упрощает сборку. - person jminuscula; 27.02.2015
comment
Это также влияет на пользователей, использующих IDE; например Я не хочу, чтобы все загрузочные классы CSS затуманивали мое автозаполнение. - person thinice; 25.03.2015
comment
Я тоже в сценарии CDN. - person sam; 21.07.2016

Приведенные выше ответы верны, но дополнительным решением является использование wiredep, как описано в этом ответе:

grunt-bower-install: исключить определенные компоненты

После установки grunt-wiredep вы можете добавить что-то подобное в свой Grunt.js, чтобы исключить внедрение jquery:

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

К сожалению, Bower по-прежнему будет загружать jquery, но, по крайней мере, вы можете указать, что он не должен быть включен в исходный код HTML.

person dustin.schultz    schedule 10.03.2015

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это не решит вашу конкретную проблему, но помогло с моей, так что, возможно, это поможет другим людям.

Я использую grunt-bower-task для загрузки файлов в каталог lib. Я хотел исключить «angular» и просто включить «angular.js». Одна из моих зависимостей тянула «угловой». В моем bower.json теперь есть:

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

В моем gruntfile.js у меня есть:

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

Это предотвращает копирование «угловых» файлов в место назначения.

person Steve N    schedule 19.06.2015