Как заставить <iron-icons> работать в Polymer 2.x
Узкий вопрос
По устранению неполадок, я думаю, я сузил свою "большую проблему" до следующего вопроса. (Но я могу ошибаться.)
Как правильно загрузить последнюю версию <iron-icons>
на мою локальную машину?
Под "последней версией" я подразумеваю версию, которая импортируется с помощью следующего:
<base href="//polygit.org/polymer+:master/components/">
<link rel="import" href="iron-icons/iron-icons.html">
Выше версия импорта <iron-icons>
работает над моим демо здесь.
Однако, когда я делаю одно из следующего:
bower install --save PolymerElements/iron-icons
bower update --save
И попробуйте импортировать на моем локальном сервере, как это:
<link rel="import" href="/bower_components/iron-icons/iron-icons.html">
он молча терпит неудачу, и я не вижу значков вообще. Но я вижу дополнительное место, где иконки должны отображаться.
Большой вопрос (настоящая проблема, которую я пытаюсь решить)
Я пытаюсь получить <iron-icons>
правильно отображать в браузере.
Что я ожидаю увидеть
Я ожидаю увидеть два <iron-icon>
элементы как это:
(закрепленный между другими тестовыми элементами: Hello World
а также <img>
)
Что я на самом деле вижу
Иконок нет вообще. Но пустое место, где они должны сделать.
Действия по воспроизведению
Бежать
bower install --save PolymerElements/iron-icons
или если <iron-icons>
уже установлено:
bower update --save
затем
polyserve
или же
polymer serve
Версия
Я считаю, что я использую v2.0.1 из <iron-icons>
, Вот все содержимое файла bower.json.
"iron-icons": "PolymerElements/iron-icons#^2.0.1",
конфигурация
ОС: macOS Sierra 10.12.6
Аппаратное обеспечение: MacBook Air
Браузер: версия Chrome 60.0.3112.113 (официальная сборка) (64-разрядная версия)
демонстрация
Код
Следующий код делает <iron-icons>
как и ожидалось:
<base href="//polygit.org/polymer+:master/components/">
<script src="webcomponentsjs/webcomponents-lite.js"></script>
<link rel="import" href="polymer/polymer-element.html">
<link rel="import" href="iron-icons/iron-icons.html">
<link rel="import" href="iron-icon/iron-icon.html">
<dom-module id="demo-el">
<template>
Hello world
<iron-icon icon="add"></iron-icon>
<iron-icon icon="favorite"></iron-icon>
<img src="//lorempixel.com/400/200/" />
</template>
<script>
class DemoEl extends Polymer.Element {
static get is() {
return 'demo-el'
}
constructor() {
super();
}
}
customElements.define(DemoEl.is, DemoEl);
</script>
</dom-module>
Следующий код НЕ рендерит <iron-icons>
как и ожидалось (обслуживается на месте):
<link rel="import" href="/bower_components/polymer/polymer-element.html">
<link rel="import" href="/bower_components/webcomponentsjs/webcomponents-lite.js">
<link rel="import" href="/bower_components/iron-icon/iron-icon.html">
<link rel="import" href="/bower_components/iron-icons/iron-icons.html">
<link rel="import" href="/bower_components/paper-input/paper-input.html">
<dom-module id="app-main">
<template>
Hello world
<iron-icon icon="add"></iron-icon>
<iron-icon icon="favorite"></iron-icon>
<img src="//lorempixel.com/400/200/" />
</template>
<script>
class AppMain extends Polymer.Element {
static get is() {
return 'app-main'
}
constructor() {
super();
}
}
customElements.define(AppMain.is, AppMain);
</script>
</dom-module>
Тем не менее, приведенный выше код делает <iron-icons>
как и ожидалось, когда я делаю прямую замену:
<base href="//polygit.org/polymer+:master/components/">
<link rel="import" href="iron-icons/iron-icons.html">
за
<link rel="import" href="/bower_components/iron-icons/iron-icons.html">
редактировать
Сравнивая текст импортируемых файлов с использованием CDN
<base href="//polygit.org/polymer+:master/components/">
<link rel="import" href="iron-icons/iron-icons.html">
и местный импорт:
<link rel="import" href="/bower_components/iron-icons/iron-icons.html">
Я обнаружил, что в импортированной версии iron-iconset-svg.html
файл. Мой файл bower.json говорит, что зависимая версия "iron-iconset-svg": "1 - 2"
или же "iron-iconset-svg": "polymerelements/iron-iconset-svg#^2.0.0"
но файл bower.json здесь говорит, что зависимая версия "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0"
Итак, теперь вопрос сводится к тому, как я могу получить локальную версию iron-icons.html
импортировать ту же версию iron-iconset-svg.html
как онлайн версия импорта CDN.
Редактировать 2
Проблема сохраняется, когда я просто копирую iron-iconset-svg.html
файл из CDN и вставьте его в мою локальную файловую систему. Так что, очевидно, что-то еще происходит.
Редактировать 3
Я следовал инструкциям по обновлению до Polymer 2.0:
https://www.polymer-project.org/2.0/docs/upgrade
- Удалите существующую папку bower_components.
rm -rf bower_components
- Обновите версию Polymer в bower.json до последних версий.
Component | Version
---------------------|--------
Polymer | ^2.0.0
webcomponentsjs | ^1.0.0
web-component-tester | ^6.0.0
Polymer elements | ^2.0.0
- Установите новые зависимости.
bower install
Это не решило проблему. Однако я не мог обновить Polymer elements
в ^2.0.0
"dependencies" : {
...
"polymer-elements" : "^2.0.0",
...
}
вызвал ошибку и так сделал:
bower.json"dependencies" : {
...
"polymerelements" : "^2.0.0",
...
}
и так сделал:
bower.json"dependencies" : {
...
"PolymerElements" : "^2.0.0",
...
}
2 ответа
Решение, предложенное @Ofisora в комментариях, работает для меня - обновление iron-selector
а также iron-meta
:
bower install --save PolymerElements/iron-meta
bower install --save PolymerElements/iron-selector
iron-icons
это импорт утилиты, который включает в себя определение дляiron-icon
элемент,iron-iconset-svg
элемент, а также импорт для набора иконок по умолчанию.
Это означает, что iron-icons
напрямую зависит от обоих iron-icon
а также iron-iconset-svg
, И оба iron-icon
а также iron-iconset-svg
элемент зависит от iron-meta
,
При обновлении iron-icons
до последней версии, эти элементы iron-icon
, iron-iconset-svg
а также iron-meta
может не обновляться, так как вы получите все эти компоненты по умолчанию. Итак, обновление iron-meta
является одним из решений.
Также, когда вы устанавливаете или обновляете элемент в полимере, вы увидите сообщения вроде:
Не удается найти подходящую версию для железных иконок, пожалуйста, выберите одну из них, набрав одно из следующих чисел:
Всегда выбирайте подходящую или последнюю версию в зависимости от другого элемента, который у вас есть.
Когда вы закончите обновление или установку, вы увидите следующее примечание:
Please note that,
iron-iconset-svg#a47e824859 depends on iron-meta#2.0-preview which resolved to iron-meta#7404b31da3
iron-icon#1.0.13, iron-icon#1.0.13, iron-icon#1.0.13, iron-iconset-svg#1.1.2, iron-iconset-svg#1.1.2 depends on iron-meta#^1.0.0 which resolved to iron-meta#1.1.3
iron-icon#2.0.0, iron-iconset-svg#2.0.0 depends on iron-meta#1 - 2 which resolved to iron-meta#2.0.2
Убедитесь, что вы прочитали это и установите / обновите необходимые зависимости.
Примечание: в моем случае мне пришлось обновить
iron-selector
а так как я использовал iron-icon
внутри iron-selector
,