关于难点(第4点),以下是您可以做的事情。
首先,确保您的Webpack可以加载CSS文件(我认为您需要使用
mini-css-extract-plugin
)。
然后只需使用以下命令导入Vuetify和Material Design图标:
import 'vuetify/dist/vuetify.min.css';
import 'material-design-icons-iconfont/dist/material-design-icons.css';
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: {
'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';