关于困难的部分(第 4 点),这是你可以做的。
首先,确保你的 Webpack 可以加载 css 文件(我认为你需要mini-css-extract-plugin)。
然后只需使用以下命令导入 Vuetify 和 Material 设计图标:
import 'vuetify/dist/vuetify.min.css';
import 'material-design-icons-iconfont/dist/material-design-icons.css';
// or if you like FontAwesome:
import '@fortawesome/fontawesome-free/css/all.css';
这是最简单的部分。现在要获取 Roboto 字体,您需要下载字体样式 https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900 并为其中的每种字体下载它并将 url 路径替换为本地路径。为此,我编写了可以使用 Node 执行的简单脚本:
const fetch = require("node-fetch");
const fs = require("fs");
const mkdirp = require('mkdirp');
const fontDirPath = './fonts/Roboto';
mkdirp.sync(fontDirPath);
(async () => {
const text = await (await fetch('https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900', {
headers: {
// we need to supply user-agent header because Google will return different (insufficient) response without it
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
}
})).text()
const fontCss = text
.split('\n')
.map(line => {
const hasURL = line.includes('url(https');
const [, url, fileName] = line.match(new RegExp('(https://.*/(.*.woff2))\\)')) || [];
if (hasURL) downloadFile(url, `${fontDirPath}/${fileName}`);
return hasURL ?
line.replace(url, fileName):
line;
})
.join('\n');
fs.writeFileSync(`${fontDirPath}/font_roboto.css`, Buffer.from(fontCss, 'utf-8'));
})()
async function downloadFile(url, path) {
const res = await fetch(url);
const fileStream = fs.createWriteStream(path);
await new Promise((resolve, reject) => {
res.body.pipe(fileStream);
res.body.on('error', reject);
fileStream.on('finish', resolve);
});
}
脚本可以改进,现在它只查找“woff2”字体。
然后导入您下载和编辑的 CSS 文件:
import './fonts/Roboto/font_roboto.css';