使用 Nuxt 2.15.3、Tailwind 和 Pwa 模块首次访问时不会加载 Safari 本地字体
Safari local fonts do not load on first visit with Nuxt 2.15.3, Tailwind and Pwa Module
我创建了一个 nuxt pwa 应用程序,www.shirime.one,它运行良好,
但我的 Safari 移动版有问题,自定义字体未加载。
当 PWA 在 IOS 上安装了 safari 时,如果我将设备连接到我的 macbook,我看不到字体文件夹。如果我从 safari 检查器刷新 PWA 就可以了。当 PWA 在 IOS 上安装了 safari 时,Nuxt PWA 模块似乎无法加载字体文件夹。不知道为什么。
我的 nuxt pwa 配置:
pwa: {
icon: {
fileName: 'app-icon.png',
},
meta: {
name: 'Shirime Challenge',
mobileApp: true,
mobileAppIOS: true,
description: false,
lang: false,
theme_color: '#000000',
ogHost: 'https://shirime.one',
twitterCard: 'summary',
twitterSite: '@jbty_dev',
twitterCreator: '@jbty_dev',
},
},
我的字体:
@font-face {
font-family: 'Nouveau';
src: url('~/assets/fonts/NouveauRegular.eot');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: 'Nouveau';
src: local('Nouveau Regular'), local('NouveauRegular'),
url('~/assets/fonts/NouveauRegular.woff2') format('woff2'),
url('~/assets/fonts/NouveauRegular.woff') format('woff'),
url('~/assets/fonts/NouveauRegular.ttf') format('truetype'),
url('~/assets/fonts/NouveauRegular.svg#NouveauRegular') format('svg');
font-weight: 100;
font-style: normal;
font-display: swap;
我的顺风配置:
import plugin from 'tailwindcss/plugin'
module.exports = {
purge: [
'./components/**/*.{vue,js}',
'./layouts/**/*.vue',
'./pages/**/*.vue',
'./plugins/**/*.{js,ts}',
'./nuxt.config.{js,ts}',
],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {
fontFamily: {
heading: ['Nouveau', 'sans-serif'],
body: ['Futura CondensedLight', 'sans-serif'],
incantation: ['Stranger back in the Night', 'sans-serif'],
},
colors: {
red: '#FF0000',
redAccent: '#ff1414',
red40: 'rgba(255,0,0,0.4)',
black: '#000000',
black92: 'rgba(0,0,0,0.92)',
white: '#ffffff',
white40: 'rgba(255,255,255,0.4)',
},
fontSize: {
xs: '.82rem',
sm: '.95rem',
tiny: '.875rem',
base: '1rem',
lg: '1.125rem',
xl: '1.25rem',
'2xl': '1.5rem',
'3xl': '2.2rem',
'4xl': '2.9rem',
'5xl': '3.3rem',
'6xl': '3.8rem',
'7xl': '6rem',
'8xl': '11rem',
},
},
},
variants: {
extend: {},
},
plugins: [
plugin(function ({ addUtilities }) {
const newUtilities = {
'.no-text-shadow': {
textShadow: 'none',
},
'.red-text-shadow': {
textShadow: '0px 0px 10px rgba(255,0,0,0.2)',
},
'.red-text-shadow-big': {
textShadow: '0px 0px 15px rgba(255,0,0,0.6)',
},
'.white-text-shadow': {
textShadow: '0px 0px 10px rgba(255,255,255,0.4)',
},
'.red-box-b-shadow': {
boxShadow: '0 18px 10px -10px rgba(255,0,0,0.2)',
},
'.white-box-b-shadow': {
boxShadow: '0 18px 10px -10px rgba(255,255,255,0.2)',
},
'.backdrop-blur': {
backdropFilter: 'blur(2px)',
},
}
addUtilities(newUtilities)
}),
],
}
我的package.json
{
"name": "shirime",
"author": {
"name": "Thery Jean-Baptiste",
"email": "jb.thery@flameapp.fr",
"url": "https://flameapp.fr"
},
"description": "Shirime Challenge - www.shirime.one digital ouija, make your friends believe that you speak with an all-knowing mind! Progressive Web App available for installation on Ios, Android, Windows, Mac Os and Linux.",
"version": "1.1.0",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt generate",
"start": "nuxt start",
"lintfix": "eslint --fix --ext .js,.vue --ignore-path .gitignore .",
"lint:js": "eslint --ext .js,.vue --ignore-path .gitignore .",
"lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
"lint": "npm run lint:js && npm run lint:style",
"test": "jest"
},
"lint-staged": {
"*.{js,vue}": "eslint",
"*.{css,vue}": "stylelint"
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-commit": "lint-staged"
}
},
"dependencies": {
"@nuxtjs/amp": "^0.5.4",
"@nuxtjs/google-adsense": "^1.3.0",
"@nuxtjs/pwa": "^3.3.5",
"@nuxtjs/sitemap": "^2.4.0",
"cookie-universal-nuxt": "^2.1.4",
"core-js": "^3.9.1",
"nuxt": "^2.15.3",
"nuxt-i18n": "^6.21.1",
"nuxt-lazy-load": "^1.2.5",
"vue-social-sharing": "^3.0.5"
},
"devDependencies": {
"@commitlint/cli": "^12.0.1",
"@commitlint/config-conventional": "^12.0.1",
"@nuxt/types": "~2.15.3",
"@nuxtjs/eslint-config": "^6.0.0",
"@nuxtjs/eslint-module": "^3.0.2",
"@nuxtjs/stylelint-module": "^4.0.0",
"@nuxtjs/tailwindcss": "^4.0.1",
"@tailwindcss/postcss7-compat": "^2.0.3",
"autoprefixer": "^10.2.5",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3",
"eslint": "^7.22.0",
"eslint-config-prettier": "^7.2.0",
"eslint-plugin-nuxt": "^2.0.0",
"eslint-plugin-prettier": "^3.3.1",
"fibers": "^5.0.0",
"husky": "4.3.8",
"lint-staged": "^10.5.4",
"postcss": "^8.2.8",
"prettier": "^2.2.1",
"stylelint": "^13.12.0",
"stylelint-config-prettier": "^8.0.2",
"stylelint-config-standard": "^21.0.0",
"tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.3"
}
}
我通过创建一个在新 pwa 版本发布时重新加载页面的插件解决了这个问题
插件文件夹
export default async () => {
const workbox = await window.$workbox
if (!workbox) {
console.debug("Workbox couldn't be loaded.")
return
}
workbox.addEventListener('installed', (event) => {
if (!event.isUpdate) {
console.debug('The PWA is on the latest version.')
return
}
console.debug('There is an update for the PWA, reloading...')
window.location.reload()
})
}
Nuxt 配置
plugins: [
{ src: '~/plugins/pwa-update.js', mode: 'client' },
],
祝你有愉快的一天
我创建了一个 nuxt pwa 应用程序,www.shirime.one,它运行良好, 但我的 Safari 移动版有问题,自定义字体未加载。
当 PWA 在 IOS 上安装了 safari 时,如果我将设备连接到我的 macbook,我看不到字体文件夹。如果我从 safari 检查器刷新 PWA 就可以了。当 PWA 在 IOS 上安装了 safari 时,Nuxt PWA 模块似乎无法加载字体文件夹。不知道为什么。
我的 nuxt pwa 配置:
pwa: {
icon: {
fileName: 'app-icon.png',
},
meta: {
name: 'Shirime Challenge',
mobileApp: true,
mobileAppIOS: true,
description: false,
lang: false,
theme_color: '#000000',
ogHost: 'https://shirime.one',
twitterCard: 'summary',
twitterSite: '@jbty_dev',
twitterCreator: '@jbty_dev',
},
},
我的字体:
@font-face {
font-family: 'Nouveau';
src: url('~/assets/fonts/NouveauRegular.eot');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: 'Nouveau';
src: local('Nouveau Regular'), local('NouveauRegular'),
url('~/assets/fonts/NouveauRegular.woff2') format('woff2'),
url('~/assets/fonts/NouveauRegular.woff') format('woff'),
url('~/assets/fonts/NouveauRegular.ttf') format('truetype'),
url('~/assets/fonts/NouveauRegular.svg#NouveauRegular') format('svg');
font-weight: 100;
font-style: normal;
font-display: swap;
我的顺风配置:
import plugin from 'tailwindcss/plugin'
module.exports = {
purge: [
'./components/**/*.{vue,js}',
'./layouts/**/*.vue',
'./pages/**/*.vue',
'./plugins/**/*.{js,ts}',
'./nuxt.config.{js,ts}',
],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {
fontFamily: {
heading: ['Nouveau', 'sans-serif'],
body: ['Futura CondensedLight', 'sans-serif'],
incantation: ['Stranger back in the Night', 'sans-serif'],
},
colors: {
red: '#FF0000',
redAccent: '#ff1414',
red40: 'rgba(255,0,0,0.4)',
black: '#000000',
black92: 'rgba(0,0,0,0.92)',
white: '#ffffff',
white40: 'rgba(255,255,255,0.4)',
},
fontSize: {
xs: '.82rem',
sm: '.95rem',
tiny: '.875rem',
base: '1rem',
lg: '1.125rem',
xl: '1.25rem',
'2xl': '1.5rem',
'3xl': '2.2rem',
'4xl': '2.9rem',
'5xl': '3.3rem',
'6xl': '3.8rem',
'7xl': '6rem',
'8xl': '11rem',
},
},
},
variants: {
extend: {},
},
plugins: [
plugin(function ({ addUtilities }) {
const newUtilities = {
'.no-text-shadow': {
textShadow: 'none',
},
'.red-text-shadow': {
textShadow: '0px 0px 10px rgba(255,0,0,0.2)',
},
'.red-text-shadow-big': {
textShadow: '0px 0px 15px rgba(255,0,0,0.6)',
},
'.white-text-shadow': {
textShadow: '0px 0px 10px rgba(255,255,255,0.4)',
},
'.red-box-b-shadow': {
boxShadow: '0 18px 10px -10px rgba(255,0,0,0.2)',
},
'.white-box-b-shadow': {
boxShadow: '0 18px 10px -10px rgba(255,255,255,0.2)',
},
'.backdrop-blur': {
backdropFilter: 'blur(2px)',
},
}
addUtilities(newUtilities)
}),
],
}
我的package.json
{
"name": "shirime",
"author": {
"name": "Thery Jean-Baptiste",
"email": "jb.thery@flameapp.fr",
"url": "https://flameapp.fr"
},
"description": "Shirime Challenge - www.shirime.one digital ouija, make your friends believe that you speak with an all-knowing mind! Progressive Web App available for installation on Ios, Android, Windows, Mac Os and Linux.",
"version": "1.1.0",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt generate",
"start": "nuxt start",
"lintfix": "eslint --fix --ext .js,.vue --ignore-path .gitignore .",
"lint:js": "eslint --ext .js,.vue --ignore-path .gitignore .",
"lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
"lint": "npm run lint:js && npm run lint:style",
"test": "jest"
},
"lint-staged": {
"*.{js,vue}": "eslint",
"*.{css,vue}": "stylelint"
},
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-commit": "lint-staged"
}
},
"dependencies": {
"@nuxtjs/amp": "^0.5.4",
"@nuxtjs/google-adsense": "^1.3.0",
"@nuxtjs/pwa": "^3.3.5",
"@nuxtjs/sitemap": "^2.4.0",
"cookie-universal-nuxt": "^2.1.4",
"core-js": "^3.9.1",
"nuxt": "^2.15.3",
"nuxt-i18n": "^6.21.1",
"nuxt-lazy-load": "^1.2.5",
"vue-social-sharing": "^3.0.5"
},
"devDependencies": {
"@commitlint/cli": "^12.0.1",
"@commitlint/config-conventional": "^12.0.1",
"@nuxt/types": "~2.15.3",
"@nuxtjs/eslint-config": "^6.0.0",
"@nuxtjs/eslint-module": "^3.0.2",
"@nuxtjs/stylelint-module": "^4.0.0",
"@nuxtjs/tailwindcss": "^4.0.1",
"@tailwindcss/postcss7-compat": "^2.0.3",
"autoprefixer": "^10.2.5",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3",
"eslint": "^7.22.0",
"eslint-config-prettier": "^7.2.0",
"eslint-plugin-nuxt": "^2.0.0",
"eslint-plugin-prettier": "^3.3.1",
"fibers": "^5.0.0",
"husky": "4.3.8",
"lint-staged": "^10.5.4",
"postcss": "^8.2.8",
"prettier": "^2.2.1",
"stylelint": "^13.12.0",
"stylelint-config-prettier": "^8.0.2",
"stylelint-config-standard": "^21.0.0",
"tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.3"
}
}
我通过创建一个在新 pwa 版本发布时重新加载页面的插件解决了这个问题
插件文件夹
export default async () => {
const workbox = await window.$workbox
if (!workbox) {
console.debug("Workbox couldn't be loaded.")
return
}
workbox.addEventListener('installed', (event) => {
if (!event.isUpdate) {
console.debug('The PWA is on the latest version.')
return
}
console.debug('There is an update for the PWA, reloading...')
window.location.reload()
})
}
Nuxt 配置
plugins: [
{ src: '~/plugins/pwa-update.js', mode: 'client' },
],
祝你有愉快的一天