Webpack html-webpack-плагин загрузки фавиконов в шаблон
Я использую Webpack с html-webpack-plugin и их предоставленным шаблоном.
Я хочу добавить список фавиконов в заголовок:
<link rel="apple-touch-icon" sizes="57x57" href="<%= htmlWebpackPlugin.extraFiles.apple-touch-icon-57x57 %>">
<link rel="apple-touch-icon" sizes="60x60" href="<%= htmlWebpackPlugin.extraFiles.favicons.fav60%>">
<link rel="apple-touch-icon" sizes="72x72" href="<%= htmlWebpackPlugin.extraFiles.favicons.fav72%>">
<link rel="apple-touch-icon" sizes="76x76" href="favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="favicons/android-chrome-192x192.png" sizes="192x192">
<link rel="icon" type="image/png" href="favicons/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="favicons/favicon-16x16.png" sizes="16x16">
<link rel="manifest" href="favicons/manifest.json">
<link rel="mask-icon" href="favicons/safari-pinned-tab.svg" color="#e53935">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="favicon/mstile-144x144.png">
<meta name="theme-color" content="#e53935">
Как я могу включить все фавиконы в мою сборку webpack, с html-webpack-plugin или без html-webpack-plugin?
Я пытался добавить их в качестве дополнительных файлов, как говорится в документах, но они не попадают в мою папку сборки.
Примечание: первые 3 были моими попытками сделать что-то, что не сработало.
4 ответов:
Вам нужно убедиться, что изображения обрабатываются WebPack и, следовательно, для них существует соответствующий загрузчик (например, файловый загрузчик ).
Чтобы это сработало, вы должны явно потребовать файлы в соответствующих атрибутах. Чтобы иметь возможность явно требовать файлы в индексе.html вы должны использовать загрузчик в свою очередь для индексирования.html сам по себе , что позволяет обрабатывать JS inline.
Это действительно зависит от вашей установки (т. е. есть ли у вас настройка html-webpack - loader ); посмотрите на FAQ, объясняя основы.
Итак, предполагая, что у вас есть несколько вдоль этого:
/ / где-то в вашем webpack config.js
plugins: [ new HtmlWebpackPlugin({ template: 'index.html', inject: 'head', }) //.. ]Вы можете требовать в ваш индекс.html-изображения, подобные этому:
<link rel="apple-touch-icon" sizes="120x120" href="${require('./favicons/apple-touch-icon-120x120.png')}">Это будет пытаться загрузить apple-touch-icon-120x120.png через WebPack, поэтому вы должны убедиться, что для него есть загрузчик и html-загрузчик должен быть настроен как хорошо:
//somewhere in your webpack.config.js module: { loaders: [ { test: /\.png$/, loader: 'file?name=assets/icons/[name].[hash].[ext]' }, { test: /\.html$/, loader: 'html', query: { interpolate: 'require' } } //.. ] //.. }Вы должны использовать require только для изображений, которые не внутри
<img>- тегов, те будут автоматически подобраны html-webpack-loader.Будущие версии html-загрузчика могут изменить это поведение - > https://github.com/webpack/html-loader/issues/17
После многочисленных испытаний...все еще не удалось заставить его работать с
html-webpack-plugin, я нашел новую библиотеку, которая помогает со всем, что связано с заголовками, описаниями, ключевыми словами...и почти любой вид заголовка называетсяreact-helmetВы можете найти его здесь: https://github.com/nfl/react-helmet
В основном вы добавляете что-то вроде этого в свой основной компонент
<Helmet link={[ {"rel": "apple-touch-icon", "href": require('apple-touch-icon-57x57.png'), "sizes": "57x57"} ]} />Надеюсь, это поможет другим.
Следить за этим для всех, кто столкнется с этим в будущем.
Вам понадобится это в вашем шаблоне:
<link href="{%=o.htmlWebpackPlugin.files.favicon%}" rel="shortcut icon">И соответствующее ему определение:
new HtmlWebpackPlugin({ favicon: "path/to/favicon" }),В
pluginsконфигурации вашего webpack.
С Webpack v4. 17. 2 и html-webpack-plugin v3. 2. 0, мне нужно было только сделать:
new HtmlWebpackPlugin({ favicon: "path/to/favicon" }),В разделе Плагины конфигурации webpack.
Comments