Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1fe6eb1

Browse files
committed
feat: add website scripts.
1 parent0259e8c commit1fe6eb1

File tree

6 files changed

+277
-0
lines changed

6 files changed

+277
-0
lines changed

‎package.json‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name":"mysql-tutorial",
3+
"version":"1.0.0",
4+
"description":"从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者。",
5+
"homepage":"https://jaywcjlove.github.io/mysql-tutorial",
6+
"author":"jaywcjlove",
7+
"license":"MIT",
8+
"private":true,
9+
"scripts": {
10+
"start":"node scripts/build.mjs"
11+
},
12+
"repository": {
13+
"type":"git",
14+
"url":"git+https://github.com/jaywcjlove/mysql-tutorial.git"
15+
},
16+
"devDependencies": {
17+
"fs-extra":"^10.0.0",
18+
"markdown-to-html-cli":"^3.2.4",
19+
"recursive-readdir-files":"^2.0.7"
20+
}
21+
}

‎scripts/build.mjs‎

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
importpathfrom'path';
2+
importfsfrom'fs-extra';
3+
importgetFilesfrom'recursive-readdir-files';
4+
import{create}from'markdown-to-html-cli';
5+
import{favicon}from'./node/favicon.mjs';
6+
import{header}from'./node/header.mjs';
7+
import{footer}from'./node/footer.mjs';
8+
9+
conststyleStr=fs.readFileSync(path.relative(process.cwd(),'scripts/style.css'));
10+
functioncreateOption(editPath){
11+
consthref=path.relative(process.cwd(),editPath);
12+
return{
13+
'github-corners':'https://github.com/jaywcjlove/handbook.git',
14+
document:{
15+
style:[styleStr.toString()],
16+
link:[
17+
{rel:'icon',href:favicon,type:'image/x-icon'}
18+
// { rel: 'shortcut icon', href: './favicon.ico' },
19+
]
20+
},
21+
rewrite:(node)=>{
22+
if(node.type==='element'&&node.properties.href&&!node.properties['data-edit']&&/\.md(.*?)$/.test(node.properties.href)){
23+
if(/(readme).md$/.test(node.properties.href.toLocaleLowerCase())){
24+
node.properties.href=node.properties.href.replace(/(readme|README).md$/,'index.html');
25+
}elseif(/.md$/.test(node.properties.href.toLocaleLowerCase())){
26+
node.properties.href=node.properties.href.replace(/.md$/,'.html');
27+
}else{
28+
node.properties.href=node.properties.href.replace(/.md(.*?)$/,'.html$1');;
29+
}
30+
}
31+
if(node.type==='element'&&node.tagName==='body'){
32+
node.properties={ ...node.properties,id:'totop'};
33+
consthomeUrl=path.relative(`${href}/..`,'./index.html');
34+
node.children=[header(homeUrl), ...node.children,footer(href)];
35+
}
36+
}
37+
}
38+
}
39+
40+
;(async()=>{
41+
awaitfs.ensureDir('build');
42+
constfiles=awaitgetFiles(process.cwd(),{
43+
ignored:/\/(node_modules|\.git|build)/,
44+
filter:(item)=>/(.md|.svg|.jpg|.png|.mp4)$/.test(item.path)
45+
});
46+
awaitPromise.all(files.map(async(item)=>{
47+
constmarkdown=awaitfs.readFile(item.path);
48+
constoutputPath=path.join('build',path.relative(process.cwd(),item.path).replace(/(README|readme).md$/,'index.html').replace(/.md$/,'.html'));
49+
awaitfs.ensureDir(path.dirname(outputPath));
50+
if(/.md$/.test(item.path)){
51+
constoptions=createOption(item.path);
52+
lettitle=markdown.toString().match(/^([\s\S]*?)===/)
53+
title=title ?title[1].replace(/\n/,'') :'';
54+
consthtml=create({
55+
markdown, ...options,
56+
document:{
57+
title:`${title ?`${title} - ` :''}mysql-tutorial`,
58+
...options.document,
59+
meta:[
60+
{description:`${title ?`${title}。`:''}从零开始学习MySQL,主要是面向MySQL数据库管理系统初学者。- mysql-tutorial`},
61+
{keywords:'example,mysql-tutorial,mysql,tutorial'}
62+
]
63+
}
64+
});
65+
awaitfs.writeFile(outputPath,html);
66+
console.log(`♻️ create file: \x1b[32;1m${outputPath} \x1b[0m`);
67+
}else{
68+
awaitfs.copyFile(item.path,outputPath);
69+
console.log(`🏞 copied file: \x1b[32;1m${outputPath} \x1b[0m`);
70+
}
71+
72+
}));
73+
})();

‎scripts/node/favicon.mjs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const favicon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAEIlJREFUeF7tnXtwVNUdx3/n7kIe8sgTNEjLTMeAUrVUKB0U0f6D1ZkKCqhBJKDSdjplHEnW6B8l0hZIQKBaq+KMQDvTOhYfnY5jpU7rg9pp0Y5aSysKA4SEAJJNIJjdkN3TOWuigcnuub97727u2fu9MzuJ7ve8vt/72XPP2XCvIBxwAA6kdUDAGzgAB9I7AEBwdsCBDA4AEJwecACA4ByAA84cwAzizDeUCogDACQgQWOYzhwAIM58Q6mAOABAAhI0hunMAQDizDeUCogDACQgQWOYzhwAIM58Q6mAOABAAhI0hunMAQDizDeUCogDACQgQWOYzhwAIM58Q6mAOABAAhI0hunMAQDizDeUCogDACQgQWOYzhwAIM58Q6mAOABAAhI0hunMgawC0tTU9DgRLRRCVDrrHqtUBxFFiSj1U0rZYVlWRzKZVP+v3bKsViJqi8fjbX19fa2NjY1JVu0BFG/atKlMSlmRSCQqhRAVRFQhpVRZqt9TP6WUJUR0wcBLCDHweyhHlm1PJBI7Hnzwwdez0V7WAGlubpbZ6LCHdbYLIVqllB8JIfZIKfcUFha+s3LlyriHbfi6qrVr16oTf6plWZcR0VQhxGUKAAWDekkpc3WSu/bJsqypdXV1e11XdF4FWQFkw4YNm6WU93nd2RzV94GCxbIsBc0/IpHIezlqN6vNrFu3blIoFLpOSjmjHwQFRC5m9qyOa1DleyKRyLe8biwrgDQ3N6vLmSqvOztM9Z0moreklLuFEO/29fW9+9BDD50cpr7YbnYACCKaLYS4RkpZbbuwoUIhxJX19fUfeNn9bAHi98srxx4KIRJSyn9KKV+TUu5qaGjY7bgyjwtu3LhxbjKZnNsPxAyPqzehuusikcgbXnYUgLh3U31i7VKwPPDAA392Xx2vhqampuuFEDcS0U1EdCmvdN6pAYifI5VSfqJgIaJXe3p6djU2Nsay0d/169fPCoVCN0opFRTfyEYbJtZpWdacurq6N73sO2YQL908ty61Q5aaWWKxmIJFbT+7Opqbm+8honuJyPPFqKuO+aRw3gBSX1/vuaXxeJx6e3tJ/Tz/d/XfPT09FI1Gv3glEgnP+5ChwhNEtFMIsbO+vv4v3IabmpqWWJb1AynlLG5Zrr6goICKioqouLj4nJ+D/9/g35U+V8ezzz5LLS0taZtLJpNzGhoazJ9BsgEIN6Surq5zgFHwHD16NAVSNg8hxG4p5c5wOLzz/vvvV7t9aY/169cvUmAQ0fXZ6FNZWRmNHz8+9brwwgtTP0eOHJmNpjypUwcIEV0biUTe8qSx/kqG5RLLD4CkM/HkyZPU2tpKR44cSf3s7Oz00u/BdXUR0fPJZHJnQ0PDK4Pf2LBhw81SSgXGDV41rk78iRMnpl4mwDDUuAGIV2eDh/UoYNra2lIvNb2rmSYLxx4i+lgIsU9K+V0imum2DQVEVVVV6jVp0iSaMGGC2yqHvbwOEMuyZtfV1Xm67Y4ZhBn74cOH6dChQ3Tw4EFqb29nls6uvKKigqqrq1MwXHzxxRQOh7PbYI5r1wGSTCZne/29FABxEfKxY8dSsAwA46IqV0UnT55MAy9XFfm8sA4QIromEon8zcthABCP3FSXXvv370+91CyT7WNgtpgyZQqVl5dnuzlf1A9AfBGD+04cP36cDhw4kIJFrV28PNR64oorrkjNGEE7dICEQqGrV61a9baXvrieQQp2nKq2pLxKyuQXia058fTqTJ308y6Wl+aquhQgChQFjALH6aFmjOnTp9Pll1/utArjy+kAeX70nGfeL6xOfVEiRfLt8MiC98/UjDrmZuCuACnY3rlREK06vwNrjm/N2KcgATLYCHXpNXAZZnc3LBQK0cyZM2nGjBm+/o7CzUlot6wOkKdLb6aWEePPr25rrLbk+3bbOF/nGJDC7Z1p/2IXgOjj2Lt3L3344YepBX66Q31jvWDBgtT3FjiIHAKSsi5WW+LoXHdUqHBH53MkaWG60ACIvdP57NmztGXLlrRitV1bU1Njr7IAqNwAIokeideW1HFtYgNSsL3za4JI/dVq2gOA2IsBgNjzaUClB2QetYwYl7ZSKazJ8aVj9nFaZQNStCM6X0rxAgDh2Dy0FoDwPNQBsrV0Hh3JAIggUdNTO/Z3nFbZgBRuizaSEBl3qTCD2IsAgNjzye4MogOEpHw4tqy0kdMqAOG45bEWgPAMdTuDABCe38OuBiC8CAAIzy/j1QCEF6EOkKdK51PriAx3MsIlFs/w4VYDEF4CAITnl/FqAMKLEIDw/DJeDUB4EWoBKZtPrWFcYvFc9bEagPDC0QHyZNl8agMgPFP9rAYgvHQACM8v49UAhBehHpBbqC2snsyQ5sAuFs/w4VYDEF4CAITnl/FqAMKLUAfIE2W30FHMIDxT/awGILx0AAjPL+PVAIQXIQDp92vfvn3U3d3Nc8+HanWPqlGjRqXtmReAqNulqpfpx0UXXUTqlenQA3IrHQ1nuMNLvizSAcjnp4mdf1EIQL5E6okyAGLUByVmEPtxeTGD/KrsVmrHDGLf9OFWAhD7CQCQQV7pbvuDSyxcYg2Flm4NghnE/geSL5SYQezH4M0MsoDaw2XpG8Ui3X4guVACEPsuewHI42UL6FhQALFvrX+V6tkcudjmPX1aPcrd7GP06NGut3kDA4jZUdvvvRffg9hvzXylbg0CQMzP+JwRABBeoACE55fxagDCi1AHyC/LFtLxcGn+L9J5tpmrBiC87AAIzy/j1QCEFyEA4fllvBqA8CIEIDy/jFcDEF6EOkAeK1tIJ7AG4ZnqZzUA4aUDQHh+Ga8GILwI9YAsohPhEuxi8Wz1rxqA8LLRAlK+iE6EAAjPVR+rAQgvHADC88t4NQDhRagD5NHyRfQpZhCeqX5WAxBeOgCE55fxagDCixCA8PwyXg1AeBHqAbmNPg2NxS4Wz1b/qgEILxsdIL8ov41OAhCeqX5WAxBeOgCE55fxagDCixCA8PwyXg1AeBECEJ5fxqsBCC9CHSBbym+njtAYLNJ5tvpXDUB42QCQfr/y4WbMaijqTh25uKsJ7zTzr9rtzasDM4Pgzoqfn8S4efW5MGMG6fcDgACQoeY5HSCby2+naBDWIAAEgACQDJfCAASAOAPkDoqGRuf/LhYAASAABDMIebHNiydMfXkibS7HDOLfPcoheoa7u9uPy4u7u28qv4M6g3CJlQ8P8Bw4NbL9PUhQvFJ+6naxAgOI/c8ds5VeXGKZ7QCv93pAaqgzlP6pwpQvD9Dh2WauGoDwsgMgPL+MVwMQXoQ6QB4pr6EuzCA8U/2sBiC8dLSAVNRQl4VLLJ6rPlYDEF44WkAwg/AM9bsagPAS0gKCGYRnqN/VAISXkA6QjRWL6ZR1Qf7/qQnPNnPVAISXHQDh+WW8GoDwIgQgPL+MVwMQXoQAhOeX8WoAwotQB8iGisV0GmsQnql+VgMQXjp6QO6k01YxFuk8W/2rBiC8bAAIzy/j1QCEFyEA4fllvBqA8CIEIDy/jFcDEF6EOkCaK+6kbqxBeKb6WQ1AeOnoAVlC3VYRFuk8W/2rBiC8bAAIzy/j1QCEFyEA4fllvBqA8CLUAdJUsYTO4BKLZ6qf1QCElw4A4fllvBqA8CIEIDy/jFcDEF6EekDuojNWIXaxeLb6Vw1AeNnoAFlfcRd9FgRA8ACdz08cu88H4Z1m/lW7fYBOYADBzat5gOTDB4oXtx4FIP798BuyZ7g3r/3AAMggr+rr6zM6hxkEM8hQJ4huDbKuYin1WAX5v0gHIAAEgGSYQwAIAHEESOVS6hGYQexf2A6zEmsQ+wF4sQZZB0DsG+4HJQCxnwIAYSzSg/JQGC++KAyKV+r00S3S11YupVgQLrHsf+6YrfQCELMd4PVeD0gtxcTI/N/F4tlmrhqA8LIDIDy/jFcDEF6EAITnl/FqAMKLUAfIzytrKY5LLJ6pflYDEF46AITnl/FqAMKLUA/IMoqLEVik82z1rxqA8LIBIDy/jFcDEF6EOkB+VrmMejGD8Ez1sxqA8NIBIDy/jFcDEF6EAITnl/FqAMKLUA/IcuoVYSzSebb6Vw1AeNnoAPlp5XI6C0B4pvpZDUB46QAQnl/GqwEIL0IAwvPLeDUA4UUIQHh+Ga8GILwI9YDcTWdFCIt0nq3+VQMQXjY6QNZU3k19AIRnqp/VAISXDgDh+WW8GoDwIgQgPL+MVwMQXoQAhOeX8WoAwotQB8jDlXdTAmsQnql+VgMQXjp6QO6hhLCwi8Wz1b9qAMLLBoDw/DJeDUB4EQIQnl/GqwEIL0IdII3j7qEk4RKL56qP1QCEFw4A4fllvBqA8CIEIDy/jFcDEF6EekDupSQJ7GLxbPWvGoDwstEBsnrcvSQBCM9UP6sBCC+dwAAya9YsnjN5qi4tLaWXX3457eiqqqpo2rRpFI1G89QB3rBaWlpIvdIdeTOD8GwJrrqgoIDi8XhwDWCOHIAwDYM8WA6sHreCZKYhS/lwbFlpI8eVDEv+oasp3BZtJCFWZ2pkzfGtnD5ACwc8ceAn41ZkrgeAeOIzKjHUAWMAWdz1Kk2OHzLUZnTbRAc6QmNoS/ntZswg03v+S987/ZaJPqPPhjqwu/hK2jVqphmAqF5OjR+g27peM9RudNskB2zBoQbklzXIgLlFMk7lfV0UpoRJfmetr8qLS+MHqbr3sKM2Ph45kfaPnEBtIyodlc+3QupRB9HQaOrJ9OjnwYP2GyD5FohX4/lm7COad+oNVnUvjZlD/yqczCoD8XkOABBzTolZn/2bbuj+u60O/2H0tfRu0RRbWogyOJALQAq2Re8TQmxGEO4dUBsZakMj06EWnuoaG4d7B6SkH8aXlTzJqYn9RWHRts6FUtBznEagTe/Aks5X6JLeof++yPbiEwbbckAkrat7lo9525a4X8QGpHh751VJonc4jUCb3gG1kbGi4yUqT3SdI1LrDbXuwOGZA/tiZ3qvoh+N6+bUyAZEVV60LfqoFOLHnIagTe9AVd+ntKLjRbL6/5LofwVfpd+OnQvLvHRAyutjy0pf51bpCBDViJ2/yeJ2Jsj6ge+NWkaMp+0lN2V+UlKQjXIwdinEyvjSsY85KJrpn1/pqyt65tQsaSWXE4lvE8mp+hJQZHJg9mfv0fuFl9Ap6wIY5d6B16VaCoTEU/ElYz9xWp3jGcRpg/lSrnBH559IkinXQaditSVj88X7XI4DgDh0u/A3p2ZTIvmmw+K5LeZg/z+3HfRvawDERTYF26MvChLzXFSRg6LiP7HasV/PQUN52QQAcRFr8Y7otKQULxHRV1xUk9WiQtKinmUlv89qI3lcOQBxGW7hM53fIYv+SETFLqvyvDjgcG8pAHHvIRX9OnpLUorFQtK1RFThQZXOq5B0jAT9VUh6ATOHcxsHSgIQ9x6eU0PqsitJw7JjlLRGdPQuHfWBx0MKdHUAJNDxY/A6BwCIziG8H2gHAEig48fgdQ4AEJ1DeD/QDgCQQMePwescACA6h/B+oB0AIIGOH4PXOQBAdA7h/UA7AEACHT8Gr3MAgOgcwvuBdgCABDp+DF7nAADROYT3A+0AAAl0/Bi8zgEAonMI7wfaAQAS6PgxeJ0DAETnEN4PtAMAJNDxY/A6BwCIziG8H2gH/g8LPRyq8vuk8QAAAABJRU5ErkJggg=='

‎scripts/node/footer.mjs‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
2+
exportconstfooter=(editPath)=>{
3+
return{
4+
type:'element',
5+
tagName:'div',
6+
properties:{
7+
className:'footer',
8+
},
9+
children:[
10+
{
11+
type:'element',
12+
tagName:'a',
13+
properties:{
14+
'data-edit':true,
15+
target:'__blank',
16+
title:`https://github.com/jaywcjlove/handbook/edit/master/${editPath}`,
17+
href:`https://github.com/jaywcjlove/handbook/edit/master/${editPath}`,
18+
},
19+
children:[{type:'text',value:'编辑当前页面'}]
20+
},
21+
{
22+
type:'element',
23+
tagName:'a',
24+
properties:{
25+
target:'__blank',
26+
href:'https://jaywcjlove.gitee.io/handbook/',
27+
},
28+
children:[{type:'text',value:'国内镜像站点 🇨🇳'}]
29+
},
30+
{
31+
type:'element',
32+
tagName:'a',
33+
properties:{
34+
target:'__blank',
35+
href:'https://github.com/jaywcjlove/handbook',
36+
},
37+
children:[{type:'text',value:'Github'}]
38+
},
39+
{
40+
type:'element',
41+
tagName:'a',
42+
properties:{
43+
target:'__blank',
44+
href:'https://gitee.com/jaywcjlove/handbook',
45+
},
46+
children:[{type:'text',value:'Gitee'}]
47+
},
48+
{
49+
type:'element',
50+
tagName:'div',
51+
properties:{
52+
className:'copyright',
53+
},
54+
children:[
55+
{type:'text',value:'Copyright © 2021. All rights reserved.'}
56+
]
57+
}
58+
]
59+
}
60+
}

‎scripts/node/header.mjs‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import{favicon}from'./favicon.mjs';
2+
3+
exportconstheader=(homeUrl)=>{
4+
return{
5+
type:'element',
6+
tagName:'header',
7+
properties:{className:'header',},
8+
children:[
9+
{
10+
type:'element',
11+
tagName:'article',
12+
properties:{className:'inner',},
13+
children:[
14+
{
15+
type:'element',
16+
tagName:'a',
17+
properties:{
18+
className:'logo',
19+
href:homeUrl||'https://jaywcjlove.github.io/mysql-tutorial',
20+
},
21+
children:[
22+
{
23+
type:'element',
24+
tagName:'img',
25+
properties:{
26+
src:favicon,
27+
alt:'mysql-tutorial logo',
28+
},
29+
children:[]
30+
}
31+
]
32+
},{
33+
type:'element',
34+
tagName:'div',
35+
properties:{
36+
className:'title',
37+
},
38+
children:[
39+
{type:'text',value:'mysql-tutorial'}
40+
]
41+
},{
42+
type:'element',
43+
tagName:'nav',
44+
properties:{
45+
className:'nav',
46+
},
47+
children:[
48+
49+
]
50+
}
51+
]
52+
}
53+
]
54+
}
55+
}

‎scripts/style.css‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
.header {
2+
position: fixed;
3+
width:100%;
4+
background:#fff;
5+
backdrop-filter:saturate(180%)blur(0.4rem);
6+
background-color:rgba(255,255,255,0.55);
7+
border-bottom:1px solid#00000014;
8+
z-index:99;
9+
top:0;
10+
}
11+
12+
.header .inner {
13+
max-width:960px;
14+
margin:0 auto;
15+
display: flex;
16+
justify-content: space-between;
17+
padding:5px0;
18+
}
19+
20+
.header .logo {
21+
margin-right:10px;
22+
}
23+
.header .title {
24+
display: flex;
25+
align-items: center;
26+
font-size:16px;
27+
font-weight: bold;
28+
color:#333;
29+
}
30+
.header .logoimg {
31+
height:26px;
32+
display: block;
33+
}
34+
35+
.markdown-body {
36+
margin-top:78px;
37+
}
38+
39+
.footer {
40+
max-width:960px;
41+
margin:0 auto;
42+
text-align: center;
43+
padding:00110px0;
44+
border-top:1px solidhsla(210,18%,87%,1);
45+
padding-top:18px;
46+
}
47+
48+
.footera {
49+
font-size:14px;
50+
text-decoration: initial;
51+
color:#3f51b5;
52+
}
53+
54+
.footera:hover {
55+
color:#009688;
56+
text-decoration: underline;
57+
}
58+
59+
.footera+a {
60+
margin-left:10px;
61+
}
62+
63+
.footer .copyright {
64+
color:#596068;
65+
font-size:14px;
66+
padding-top:5px;
67+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp