mirror of https://github.com/dunwu/db-tutorial.git
feat: 更新配置
parent
c82e9d737a
commit
4c3ab73e81
|
@ -15,7 +15,7 @@ jobs:
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [14.x]
|
node-version: [16.x]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# 使用的动作。格式:userName/repoName。作用:检出仓库,获取源码。 官方actions库:https://github.com/actions
|
# 使用的动作。格式:userName/repoName。作用:检出仓库,获取源码。 官方actions库:https://github.com/actions
|
||||||
|
|
|
@ -12,7 +12,10 @@ module.exports = {
|
||||||
// 注入到页面<head> 中的标签,格式[tagName, { attrName: attrValue }, innerHTML?]
|
// 注入到页面<head> 中的标签,格式[tagName, { attrName: attrValue }, innerHTML?]
|
||||||
['link', { rel: 'icon', href: '/img/favicon.ico' }], //favicons,资源放在public文件夹
|
['link', { rel: 'icon', href: '/img/favicon.ico' }], //favicons,资源放在public文件夹
|
||||||
['meta', { name: 'keywords', content: 'vuepress,theme,blog,vdoing' }],
|
['meta', { name: 'keywords', content: 'vuepress,theme,blog,vdoing' }],
|
||||||
['meta', { name: 'theme-color', content: '#11a8cd' }] // 移动浏览器主题颜色
|
['meta', { name: 'theme-color', content: '#11a8cd' }], // 移动浏览器主题颜色
|
||||||
|
|
||||||
|
['meta', { name: 'wwads-cn-verify', content: 'mxqWx62nfQQ9ocT4e5DzISHzOWyF4s' }], // 广告相关,你可以去掉
|
||||||
|
['script', { src: 'https://cdn.wwads.cn/js/makemoney.js', type: 'text/javascript' }], // 广告相关,你可以去掉
|
||||||
],
|
],
|
||||||
markdown: {
|
markdown: {
|
||||||
// lineNumbers: true,
|
// lineNumbers: true,
|
||||||
|
@ -63,9 +66,10 @@ module.exports = {
|
||||||
editLinkText: '📝 帮助改善此页面!',
|
editLinkText: '📝 帮助改善此页面!',
|
||||||
|
|
||||||
// 以下配置是Vdoing主题改动的和新增的配置
|
// 以下配置是Vdoing主题改动的和新增的配置
|
||||||
sidebar: { mode: 'structuring', collapsable: false }, // 侧边栏 'structuring' | { mode: 'structuring', collapsable: Boolean} | 'auto' | 自定义 温馨提示:目录页数据依赖于结构化的侧边栏数据,如果你不设置为'structuring',将无法使用目录页
|
sidebar: { mode: 'structuring', collapsable: true }, // 侧边栏 'structuring' | { mode: 'structuring', collapsable:
|
||||||
|
// Boolean} | 'auto' | 自定义 温馨提示:目录页数据依赖于结构化的侧边栏数据,如果你不设置为'structuring',将无法使用目录页
|
||||||
|
|
||||||
// sidebarOpen: false, // 初始状态是否打开侧边栏,默认true
|
sidebarOpen: true, // 初始状态是否打开侧边栏,默认true
|
||||||
updateBar: {
|
updateBar: {
|
||||||
// 最近更新栏
|
// 最近更新栏
|
||||||
showToArticle: true // 显示到文章页底部,默认true
|
showToArticle: true // 显示到文章页底部,默认true
|
||||||
|
|
|
@ -20,25 +20,42 @@
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
// 万维广告
|
// 万维广告
|
||||||
pageB: `
|
// pageT: `
|
||||||
<div class="wwads-cn wwads-horizontal pageB" data-id="136" style="width:100%;max-height:80px;min-height:auto;"></div>
|
// <div class="wwads-cn wwads-horizontal page-wwads" data-id="261"></div>
|
||||||
<style>
|
// <style>
|
||||||
.pageB img{width:80px!important;}
|
// .page-wwads{
|
||||||
.wwads-horizontal .wwads-text, .wwads-content .wwads-text{line-height:1;}
|
// width:100%!important;
|
||||||
</style>
|
// min-height: 0;
|
||||||
`,
|
// margin: 0;
|
||||||
|
// }
|
||||||
|
// .page-wwads .wwads-img img{
|
||||||
|
// width:80px!important;
|
||||||
|
// }
|
||||||
|
// .page-wwads .wwads-poweredby{
|
||||||
|
// width: 40px;
|
||||||
|
// position: absolute;
|
||||||
|
// right: 25px;
|
||||||
|
// bottom: 3px;
|
||||||
|
// }
|
||||||
|
// .wwads-content .wwads-text, .page-wwads .wwads-text{
|
||||||
|
// height: 100%;
|
||||||
|
// padding-top: 5px;
|
||||||
|
// display: block;
|
||||||
|
// }
|
||||||
|
// </style>
|
||||||
|
// `,
|
||||||
windowRB: `
|
windowRB: `
|
||||||
<div class="wwads-cn wwads-vertical windowRB" data-id="136" style="max-width:160px;
|
<div class="wwads-cn wwads-vertical windowRB" data-id="261" style="max-width:160px;
|
||||||
min-width: auto;min-height:auto;"></div>
|
min-width: auto;min-height:auto;"></div>
|
||||||
<style>
|
<style>
|
||||||
.windowRB{ padding: 0;}
|
.windowRB{ padding: 0;}
|
||||||
.windowRB .wwads-img{margin-top: 10px;}
|
.windowRB .wwads-img{margin-top: 10px;}
|
||||||
.windowRB .wwads-content{margin: 0 10px 10px 10px;}
|
.windowRB .wwads-content{margin: 0 10px 40px 10px;}
|
||||||
.custom-html-window-rb .close-but{
|
.custom-html-window-rb .close-but{
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
`
|
`,
|
||||||
}
|
}
|
||||||
|
|
||||||
// module.exports = {
|
// module.exports = {
|
||||||
|
|
|
@ -1,9 +1,59 @@
|
||||||
// import vue from 'vue/dist/vue.esm.browser'
|
/**
|
||||||
|
* to主题使用者:你可以去掉本文件的所有代码
|
||||||
|
*/
|
||||||
export default ({
|
export default ({
|
||||||
Vue, // VuePress 正在使用的 Vue 构造函数
|
Vue, // VuePress 正在使用的 Vue 构造函数
|
||||||
options, // 附加到根实例的一些选项
|
options, // 附加到根实例的一些选项
|
||||||
router, // 当前应用的路由实例
|
router, // 当前应用的路由实例
|
||||||
siteData // 站点元数据
|
siteData, // 站点元数据
|
||||||
|
isServer // 当前应用配置是处于 服务端渲染 还是 客户端
|
||||||
}) => {
|
}) => {
|
||||||
// window.Vue = vue // 使页面中可以使用Vue构造函数 (使页面中的vue demo生效)
|
|
||||||
|
// 用于监控在路由变化时检查广告拦截器 (to主题使用者:你可以去掉本文件的所有代码)
|
||||||
|
if (!isServer) {
|
||||||
|
router.afterEach(() => {
|
||||||
|
//check if wwads' fire function was blocked after document is ready with 3s timeout (waiting the ad loading)
|
||||||
|
docReady(function () {
|
||||||
|
setTimeout(function () {
|
||||||
|
if (window._AdBlockInit === undefined) {
|
||||||
|
ABDetected();
|
||||||
|
}
|
||||||
|
}, 3000);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 删除事件改为隐藏事件
|
||||||
|
setTimeout(() => {
|
||||||
|
const pageAD = document.querySelector('.page-wwads');
|
||||||
|
if (!pageAD) return;
|
||||||
|
const btnEl = pageAD.querySelector('.wwads-hide');
|
||||||
|
if (btnEl) {
|
||||||
|
btnEl.onclick = () => {
|
||||||
|
pageAD.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 显示广告模块
|
||||||
|
if (pageAD.style.display === 'none') {
|
||||||
|
pageAD.style.display = 'flex';
|
||||||
|
}
|
||||||
|
}, 900);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ABDetected() {
|
||||||
|
const h = "<style>.wwads-horizontal,.wwads-vertical{background-color:#f4f8fa;padding:5px;min-height:120px;margin-top:20px;box-sizing:border-box;border-radius:3px;font-family:sans-serif;display:flex;min-width:150px;position:relative;overflow:hidden;}.wwads-horizontal{flex-wrap:wrap;justify-content:center}.wwads-vertical{flex-direction:column;align-items:center;padding-bottom:32px}.wwads-horizontal a,.wwads-vertical a{text-decoration:none}.wwads-horizontal .wwads-img,.wwads-vertical .wwads-img{margin:5px}.wwads-horizontal .wwads-content,.wwads-vertical .wwads-content{margin:5px}.wwads-horizontal .wwads-content{flex:130px}.wwads-vertical .wwads-content{margin-top:10px}.wwads-horizontal .wwads-text,.wwads-content .wwads-text{font-size:14px;line-height:1.4;color:#0e1011;-webkit-font-smoothing:antialiased}.wwads-horizontal .wwads-poweredby,.wwads-vertical .wwads-poweredby{display:block;font-size:11px;color:#a6b7bf;margin-top:1em}.wwads-vertical .wwads-poweredby{position:absolute;left:10px;bottom:10px}.wwads-horizontal .wwads-poweredby span,.wwads-vertical .wwads-poweredby span{transition:all 0.2s ease-in-out;margin-left:-1em}.wwads-horizontal .wwads-poweredby span:first-child,.wwads-vertical .wwads-poweredby span:first-child{opacity:0}.wwads-horizontal:hover .wwads-poweredby span,.wwads-vertical:hover .wwads-poweredby span{opacity:1;margin-left:0}.wwads-horizontal .wwads-hide,.wwads-vertical .wwads-hide{position:absolute;right:-23px;bottom:-23px;width:46px;height:46px;border-radius:23px;transition:all 0.3s ease-in-out;cursor:pointer;}.wwads-horizontal .wwads-hide:hover,.wwads-vertical .wwads-hide:hover{background:rgb(0 0 0 /0.05)}.wwads-horizontal .wwads-hide svg,.wwads-vertical .wwads-hide svg{position:absolute;left:10px;top:10px;fill:#a6b7bf}.wwads-horizontal .wwads-hide:hover svg,.wwads-vertical .wwads-hide:hover svg{fill:#3E4546}</style><a href='https://wwads.cn/page/whitelist-wwads' class='wwads-img' target='_blank' rel='nofollow'><img src='https://fastly.jsdelivr.net/gh/xugaoyi/image_store@master/blog/wwads.2a3pidhlh4ys.webp' width='130'></a><div class='wwads-content'><a href='https://wwads.cn/page/whitelist-wwads' class='wwads-text' target='_blank' rel='nofollow'>为了本站的长期运营,请将我们的网站加入广告拦截器的白名单,感谢您的支持!<span style='color: #11a8cd'>如何添加白名单?</span></a><a href='https://wwads.cn/page/end-user-privacy' class='wwads-poweredby' title='万维广告 ~ 让广告更优雅,且有用' target='_blank'><span>广告</span></a></div><a class='wwads-hide' onclick='parentNode.remove()' title='隐藏广告'><svg xmlns='http://www.w3.org/2000/svg' width='6' height='7'><path d='M.879.672L3 2.793 5.121.672a.5.5 0 11.707.707L3.708 3.5l2.12 2.121a.5.5 0 11-.707.707l-2.12-2.12-2.122 2.12a.5.5 0 11-.707-.707l2.121-2.12L.172 1.378A.5.5 0 01.879.672z'></path></svg></a>";
|
||||||
|
const wwadsEl = document.getElementsByClassName("wwads-cn");
|
||||||
|
const wwadsContentEl = document.querySelector('.wwads-content');
|
||||||
|
if (wwadsEl[0] && !wwadsContentEl) {
|
||||||
|
wwadsEl[0].innerHTML = h;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//check document ready
|
||||||
|
function docReady(t) {
|
||||||
|
"complete" === document.readyState ||
|
||||||
|
"interactive" === document.readyState
|
||||||
|
? setTimeout(t, 1)
|
||||||
|
: document.addEventListener("DOMContentLoaded", t);
|
||||||
}
|
}
|
||||||
|
|
20
package.json
20
package.json
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "java-tutorial",
|
"name": "db-tutorial",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"clean": "rimraf docs/.temp",
|
"clean": "rimraf docs/.temp",
|
||||||
"start": "vuepress dev docs",
|
"start": "node --max_old_space_size=4096 ./node_modules/vuepress/cli.js dev docs",
|
||||||
"build": "vuepress build docs",
|
"build": "node --max_old_space_size=4096 ./node_modules/vuepress/cli.js build docs",
|
||||||
"deploy": "bash scripts/deploy.sh",
|
"deploy": "bash scripts/deploy.sh",
|
||||||
"updateTheme": "yarn remove vuepress-theme-vdoing && rm -rf node_modules && yarn && yarn add vuepress-theme-vdoing -D",
|
"updateTheme": "yarn remove vuepress-theme-vdoing && rm -rf node_modules && yarn && yarn add vuepress-theme-vdoing -D",
|
||||||
"editFm": "node utils/editFrontmatter.js",
|
"editFm": "node utils/editFrontmatter.js",
|
||||||
|
@ -15,19 +15,23 @@
|
||||||
"view-info": "vuepress view-info ./ --temp docs/.temp"
|
"view-info": "vuepress view-info ./ --temp docs/.temp"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"dayjs": "^1.9.7",
|
"dayjs": "^1.11.7",
|
||||||
"inquirer": "^7.1.0",
|
"inquirer": "^9.1.4",
|
||||||
"json2yaml": "^1.1.0",
|
"json2yaml": "^1.1.0",
|
||||||
"vuepress": "1.9.2",
|
"markdownlint-cli": "^0.33.0",
|
||||||
|
"markdownlint-rule-emphasis-style": "^1.0.1",
|
||||||
|
"rimraf": "^4.1.2",
|
||||||
|
"vue-toasted": "^1.1.25",
|
||||||
|
"vuepress": "1.9.9",
|
||||||
"vuepress-plugin-baidu-tongji": "^1.0.1",
|
"vuepress-plugin-baidu-tongji": "^1.0.1",
|
||||||
"vuepress-plugin-comment": "^0.7.3",
|
"vuepress-plugin-comment": "^0.7.3",
|
||||||
"vuepress-plugin-demo-block": "^0.7.2",
|
"vuepress-plugin-demo-block": "^0.7.2",
|
||||||
|
"vuepress-plugin-flowchart": "^1.4.2",
|
||||||
"vuepress-plugin-fulltext-search": "^2.2.1",
|
"vuepress-plugin-fulltext-search": "^2.2.1",
|
||||||
"vuepress-plugin-one-click-copy": "^1.0.2",
|
"vuepress-plugin-one-click-copy": "^1.0.2",
|
||||||
"vuepress-plugin-thirdparty-search": "^1.0.2",
|
"vuepress-plugin-thirdparty-search": "^1.0.2",
|
||||||
"vuepress-plugin-zooming": "^1.1.7",
|
"vuepress-plugin-zooming": "^1.1.7",
|
||||||
"vuepress-plugin-flowchart": "^1.4.2",
|
"vuepress-theme-vdoing": "^1.12.9",
|
||||||
"vuepress-theme-vdoing": "^1.10.3",
|
|
||||||
"yamljs": "^0.3.0",
|
"yamljs": "^0.3.0",
|
||||||
"markdownlint-cli": "^0.25.0",
|
"markdownlint-cli": "^0.25.0",
|
||||||
"markdownlint-rule-emphasis-style": "^1.0.1",
|
"markdownlint-rule-emphasis-style": "^1.0.1",
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
/**
|
||||||
|
* @see https://prettier.io/docs/en/options.html
|
||||||
|
* @see https://prettier.io/docs/en/configuration.html
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
tabWidth: 2,
|
||||||
|
semi: false,
|
||||||
|
singleQuote: true,
|
||||||
|
trailingComma: 'none'
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# gh-pages 部署脚本
|
# gh-pages 部署脚本
|
||||||
# @author Zhang Peng
|
# @author <a href="mailto:forbreak@163.com">Zhang Peng</a>
|
||||||
# @since 2020/2/10
|
# @since 2020/2/10
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
#批量添加和修改、删除front matter配置文件
|
# 批量添加和修改、删除front matter配置文件
|
||||||
|
|
||||||
# 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... )
|
# 需要批量处理的路径,docs文件夹内的文件夹 (数组,映射路径:path[0]/path[1]/path[2] ... )
|
||||||
path:
|
path:
|
||||||
- docs # 第一个成员必须是docs
|
- docs # 第一个成员必须是docs
|
||||||
|
|
||||||
# 要删除的字段 (数组)
|
# 要删除的字段 (数组)
|
||||||
delete:
|
delete:
|
||||||
# - test
|
|
||||||
# - tags
|
# - tags
|
||||||
|
|
||||||
# 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖)
|
# 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖)
|
||||||
data:
|
data:
|
||||||
article: false
|
# author:
|
||||||
|
# name: xugaoyi
|
||||||
|
# link: https://github.com/xugaoyi
|
||||||
|
|
|
@ -1,41 +1,43 @@
|
||||||
/**
|
/**
|
||||||
* 批量添加和修改front matter ,需要配置 ./config.yml 文件。
|
* 批量添加和修改front matter ,需要配置 ./config.yml 文件。
|
||||||
*/
|
*/
|
||||||
const fs = require('fs'); // 文件模块
|
const fs = require('fs') // 文件模块
|
||||||
const path = require('path'); // 路径模块
|
const path = require('path') // 路径模块
|
||||||
const matter = require('gray-matter'); // front matter解析器 https://github.com/jonschlinkert/gray-matter
|
const matter = require('gray-matter') // front matter解析器 https://github.com/jonschlinkert/gray-matter
|
||||||
const jsonToYaml = require('json2yaml')
|
const jsonToYaml = require('json2yaml')
|
||||||
const yamlToJs = require('yamljs')
|
const yamlToJs = require('yamljs')
|
||||||
const inquirer = require('inquirer') // 命令行操作
|
const inquirer = require('inquirer') // 命令行操作
|
||||||
const chalk = require('chalk') // 命令行打印美化
|
const chalk = require('chalk') // 命令行打印美化
|
||||||
const readFileList = require('./modules/readFileList');
|
const readFileList = require('./modules/readFileList')
|
||||||
const { type, repairDate} = require('./modules/fn');
|
const { type, repairDate } = require('./modules/fn')
|
||||||
const log = console.log
|
const log = console.log
|
||||||
|
|
||||||
const configPath = path.join(__dirname, 'config.yml') // 配置文件的路径
|
const configPath = path.join(__dirname, 'config.yml') // 配置文件的路径
|
||||||
|
|
||||||
main();
|
main()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主体函数
|
* 主体函数
|
||||||
*/
|
*/
|
||||||
async function main() {
|
async function main() {
|
||||||
|
const promptList = [
|
||||||
|
{
|
||||||
|
type: 'confirm',
|
||||||
|
message: chalk.yellow('批量操作frontmatter有修改数据的风险,确定要继续吗?'),
|
||||||
|
name: 'edit'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
let edit = true
|
||||||
|
|
||||||
const promptList = [{
|
await inquirer.prompt(promptList).then((answers) => {
|
||||||
type: "confirm",
|
|
||||||
message: chalk.yellow('批量操作frontmatter有修改数据的风险,确定要继续吗?'),
|
|
||||||
name: "edit",
|
|
||||||
}];
|
|
||||||
let edit = true;
|
|
||||||
|
|
||||||
await inquirer.prompt(promptList).then(answers => {
|
|
||||||
edit = answers.edit
|
edit = answers.edit
|
||||||
})
|
})
|
||||||
|
|
||||||
if(!edit) { // 退出操作
|
if (!edit) {
|
||||||
|
// 退出操作
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const config = yamlToJs.load(configPath) // 解析配置文件的数据转为js对象
|
const config = yamlToJs.load(configPath) // 解析配置文件的数据转为js对象
|
||||||
|
|
||||||
if (type(config.path) !== 'array') {
|
if (type(config.path) !== 'array') {
|
||||||
|
@ -48,27 +50,26 @@ async function main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const filePath = path.join(__dirname, '..', ...config.path); // 要批量修改的文件路径
|
const filePath = path.join(__dirname, '..', ...config.path) // 要批量修改的文件路径
|
||||||
const files = readFileList(filePath); // 读取所有md文件数据
|
const files = readFileList(filePath) // 读取所有md文件数据
|
||||||
|
|
||||||
files.forEach(file => {
|
files.forEach((file) => {
|
||||||
let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件的内容
|
let dataStr = fs.readFileSync(file.filePath, 'utf8') // 读取每个md文件的内容
|
||||||
const fileMatterObj = matter(dataStr) // 解析md文件的front Matter。 fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{<frontmatter对象>}, ...}
|
const fileMatterObj = matter(dataStr) // 解析md文件的front Matter。 fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{<frontmatter对象>}, ...}
|
||||||
let matterData = fileMatterObj.data; // 得到md文件的front Matter
|
let matterData = fileMatterObj.data // 得到md文件的front Matter
|
||||||
|
|
||||||
let mark = false
|
let mark = false
|
||||||
// 删除操作
|
// 删除操作
|
||||||
if (config.delete) {
|
if (config.delete) {
|
||||||
if( type(config.delete) !== 'array' ) {
|
if (type(config.delete) !== 'array') {
|
||||||
log(chalk.yellow('未能完成删除操作,delete字段的值应该是一个数组!'))
|
log(chalk.yellow('未能完成删除操作,delete字段的值应该是一个数组!'))
|
||||||
} else {
|
} else {
|
||||||
config.delete.forEach(item => {
|
config.delete.forEach((item) => {
|
||||||
if (matterData[item]) {
|
if (matterData[item]) {
|
||||||
delete matterData[item]
|
delete matterData[item]
|
||||||
mark = true
|
mark = true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,16 +78,21 @@ async function main() {
|
||||||
Object.assign(matterData, config.data) // 将配置数据合并到front Matter对象
|
Object.assign(matterData, config.data) // 将配置数据合并到front Matter对象
|
||||||
mark = true
|
mark = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 有操作时才继续
|
// 有操作时才继续
|
||||||
if (mark) {
|
if (mark) {
|
||||||
if(matterData.date && type(matterData.date) === 'date') {
|
if (matterData.date && type(matterData.date) === 'date') {
|
||||||
matterData.date = repairDate(matterData.date) // 修复时间格式
|
matterData.date = repairDate(matterData.date) // 修复时间格式
|
||||||
}
|
}
|
||||||
const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g,"\n").replace(/"/g,"") + '---\r\n' + fileMatterObj.content;
|
const newData =
|
||||||
fs.writeFileSync(file.filePath, newData); // 写入
|
jsonToYaml
|
||||||
|
.stringify(matterData)
|
||||||
|
.replace(/\n\s{2}/g, '\n')
|
||||||
|
.replace(/"/g, '') +
|
||||||
|
'---\r\n' +
|
||||||
|
fileMatterObj.content
|
||||||
|
fs.writeFileSync(file.filePath, newData) // 写入
|
||||||
log(chalk.green(`update frontmatter:${file.filePath} `))
|
log(chalk.green(`update frontmatter:${file.filePath} `))
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,25 @@
|
||||||
// 类型判断
|
// 类型判断
|
||||||
exports.type = function (o){
|
exports.type = function (o) {
|
||||||
var s = Object.prototype.toString.call(o)
|
var s = Object.prototype.toString.call(o)
|
||||||
return s.match(/\[object (.*?)\]/)[1].toLowerCase()
|
return s.match(/\[object (.*?)\]/)[1].toLowerCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修复date时区格式的问题
|
// 修复date时区格式的问题
|
||||||
exports.repairDate = function (date) {
|
exports.repairDate = function (date) {
|
||||||
date = new Date(date);
|
date = new Date(date)
|
||||||
return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`;
|
return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())} ${zero(
|
||||||
|
date.getUTCHours()
|
||||||
|
)}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`
|
||||||
}
|
}
|
||||||
|
|
||||||
// 日期的格式
|
// 日期的格式
|
||||||
exports.dateFormat = function (date) {
|
exports.dateFormat = function (date) {
|
||||||
return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}`
|
return `${date.getFullYear()}-${zero(date.getMonth() + 1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(
|
||||||
|
date.getMinutes()
|
||||||
|
)}:${zero(date.getSeconds())}`
|
||||||
}
|
}
|
||||||
|
|
||||||
// 小于10补0
|
// 小于10补0
|
||||||
function zero(d){
|
function zero(d) {
|
||||||
return d.toString().padStart(2,'0')
|
return d.toString().padStart(2, '0')
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,43 +1,49 @@
|
||||||
/**
|
/**
|
||||||
* 读取所有md文件数据
|
* 读取所有md文件数据
|
||||||
*/
|
*/
|
||||||
const fs = require('fs'); // 文件模块
|
const fs = require('fs') // 文件模块
|
||||||
const path = require('path'); // 路径模块
|
const path = require('path') // 路径模块
|
||||||
const docsRoot = path.join(__dirname, '..', '..', 'docs'); // docs文件路径
|
const docsRoot = path.join(__dirname, '..', '..', 'docs') // docs文件路径
|
||||||
|
|
||||||
function readFileList(dir = docsRoot, filesList = []) {
|
function readFileList(dir = docsRoot, filesList = []) {
|
||||||
const files = fs.readdirSync(dir);
|
const files = fs.readdirSync(dir)
|
||||||
files.forEach( (item, index) => {
|
files.forEach((item, index) => {
|
||||||
let filePath = path.join(dir, item);
|
let filePath = path.join(dir, item)
|
||||||
const stat = fs.statSync(filePath);
|
const stat = fs.statSync(filePath)
|
||||||
if (stat.isDirectory() && item !== '.vuepress') {
|
if (stat.isDirectory() && item !== '.vuepress') {
|
||||||
readFileList(path.join(dir, item), filesList); //递归读取文件
|
readFileList(path.join(dir, item), filesList) //递归读取文件
|
||||||
} else {
|
} else {
|
||||||
if(path.basename(dir) !== 'docs'){ // 过滤docs目录级下的文件
|
if (path.basename(dir) !== 'docs') {
|
||||||
|
// 过滤docs目录级下的文件
|
||||||
|
|
||||||
const fileNameArr = path.basename(filePath).split('.')
|
const filename = path.basename(filePath)
|
||||||
let name = null, type = null;
|
const fileNameArr = filename.split('.')
|
||||||
if (fileNameArr.length === 2) { // 没有序号的文件
|
const firstDotIndex = filename.indexOf('.')
|
||||||
name = fileNameArr[0]
|
const lastDotIndex = filename.lastIndexOf('.')
|
||||||
type = fileNameArr[1]
|
|
||||||
} else if (fileNameArr.length === 3) { // 有序号的文件
|
|
||||||
name = fileNameArr[1]
|
|
||||||
type = fileNameArr[2]
|
|
||||||
} else { // 超过两个‘.’的
|
|
||||||
log(chalk.yellow(`warning: 该文件 "${filePath}" 没有按照约定命名,将忽略生成相应数据。`))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if(type === 'md'){ // 过滤非md文件
|
|
||||||
filesList.push({
|
|
||||||
name,
|
|
||||||
filePath
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
let name = null,
|
||||||
|
type = null
|
||||||
|
if (fileNameArr.length === 2) {
|
||||||
|
// 没有序号的文件
|
||||||
|
name = fileNameArr[0]
|
||||||
|
type = fileNameArr[1]
|
||||||
|
} else if (fileNameArr.length >= 3) {
|
||||||
|
// 有序号的文件(或文件名中间有'.')
|
||||||
|
name = filename.substring(firstDotIndex + 1, lastDotIndex)
|
||||||
|
type = filename.substring(lastDotIndex + 1)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
if (type === 'md') {
|
||||||
return filesList;
|
// 过滤非md文件
|
||||||
|
filesList.push({
|
||||||
|
name,
|
||||||
|
filePath
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return filesList
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = readFileList;
|
module.exports = readFileList
|
||||||
|
|
Loading…
Reference in New Issue