Включение файлов
Пусть файл Markdown на вашем сайте VuePress поддерживает, включая другие файлы.
Конфиг
// .vuepress/config.ts
import { defineUserConfig } from "vuepress";
import { hopeTheme } from "vuepress-theme-hope";
export default defineUserConfig({
theme: hopeTheme({
plugins: {
mdEnhance: {
include: true,
},
},
}),
});
// .vuepress/config.js
import { hopeTheme } from "vuepress-theme-hope";
export default {
theme: hopeTheme({
plugins: {
mdEnhance: {
include: true,
},
},
}),
};
Синтаксис
Используйте @include(filename)
, чтобы включить файл.
Чтобы частично импортировать файл, вы можете указать диапазон включаемых строк:
@include(filename{start-end})
@include(filename{start-})
@include(filename{-end})
Также вы можете указать область файла:
@include(filename#region)
Область файла
Область файла — это понятие в vscode, где содержимое области окружено комментариями #region
и #endregion
.
Вот некоторые примеры:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!-- region snippet -->
<p>
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eligendi,
repellendus. Voluptatibus alias cupiditate at, fuga tenetur error officiis
provident quisquam autem, porro facere! Neque quibusdam animi quaerat
eligendi recusandae eaque.
</p>
<!-- endregion snippet -->
<p>
Veniam harum illum natus omnis necessitatibus numquam architecto eum
dignissimos, quos a adipisci et non quam maxime repellendus alias ipsum,
vero praesentium laborum commodi perferendis velit repellat? Vero,
cupiditate sequi.
</p>
</body>
</html>
## Hello world
<!-- #region snippet -->
Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates
inventore iure quo aut doloremque, ipsum ab voluptatem ipsa, velit laborum
illo quae omnis reiciendis hic, ut dolorem non debitis in!
<!-- #endregion snippet -->
Veniam harum illum natus omnis necessitatibus numquam architecto eum
dignissimos, quos a adipisci et non quam maxime repellendus alias ipsum,
vero praesentium laborum commodi perferendis velit repellat? Vero,
cupiditate sequi.
import MarkdownIt from "markdown-it";
import { include } from "@mdit/plugin-include";
// #region snippet
const mdIt = MarkdownIt().use(include, {
// your options, currentPath is required
currentPath: (env) => env.filePath,
});
// #endregion snippet
mdIt.render("@include(./path/to/include/file.md)", {
filePath: "path/to/current/file.md",
});
const MarkdownIt = require("markdown-it");
const { include } = require("@mdit/plugin-include");
// #region snippet
const mdIt = MarkdownIt().use(include, {
// your options, currentPath is required
currentPath: (env) => env.filePath,
});
// #endregion snippet
mdIt.render("@include(./path/to/include/file.md)", {
filePath: "path/to/current/file.md",
});
html,
body {
margin: 0;
padding: 0;
}
/* #region snippet */
h1 {
font-size: 1.5rem;
}
/* #endregion snippet */
h2 {
font-size: 1.2rem;
}
html,
body {
margin: 0;
padding: 0;
}
/* #region snippet */
h1 {
font-size: 1.5rem;
}
/* #endregion snippet */
h2 {
font-size: 1.2rem;
}
html,
body {
margin: 0;
padding: 0;
}
/* #region snippet */
h1 {
font-size: 1.5rem;
}
/* #endregion snippet */
h2 {
font-size: 1.2rem;
}
public class HelloWorld {
// #region snippet
public static void main(String args[]){
System.out.println("Hello World");
}
// #endregion snippet
}
class MyClass:
msg = "world"
#region snippet
def sayHello(self):
print("Hello " + self.msg + "!")
#region snippet
def sayBye(self):
print("Bye " + self.msg + "!")
Imports System
Module Module1
# Region snippet
Sub Main()
Console.WriteLine("Hello World!")
Console.WriteLine("Press Enter Key to Exit.")
Console.ReadLine()
End Sub
# EndRegion
End Module
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
::#region snippet
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
::#endregion snippet
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
using System;
namespace HelloWorldApp {
class Geeks {
// #region snippet
static void Main(string[] args) {
// statement
// printing Hello World!
Console.WriteLine("Hello World!");
// To prevents the screen from
// running and closing quickly
Console.ReadKey();
}
// #endregion snippet
}
}
Демо
@include(./demo.snippet.md)
:
@include(./demo.snippet.md)
@include(./demo.snippet.md{9-13})
:
@include(./demo.snippet.md{9-13})
@include(./demo.snippet.md#snippet)
:
@include(./demo.snippet.md#snippet)
Продвинутый
Вы также можете настроить объект для настройки пути к включаемому файлу и поведения включения.
interface IncludeOptions {
/**
* handle include filePath
*
* @default (path) => path
*/
resolvePath?: (path: string, cwd: string) => string;
/**
* Whether deep include files in included Markdown files
*
* @default false
*/
deep?: boolean;
}
Например: вы можете использовать @src
в качестве псевдонима для вашего исходного каталога.
// .vuepress/config.ts
import { getDirname, path } from "@vuepress/utils";
import { defineUserConfig } from "vuepress";
import { hopeTheme } from "vuepress-theme-hope";
const __dirname = getDirname(import.meta.url);
export default defineUserConfig({
theme: hopeTheme({
plugins: {
mdEnhance: {
// Add `@src` alias support
include: {
resolvePath: (file) => {
if (file.startsWith("@src"))
return file.replace("@src", path.resolve(__dirname, ".."));
return file;
},
},
},
},
}),
});
// .vuepress/config.js
import { getDirname, path } from "@vuepress/utils";
import { hopeTheme } from "vuepress-theme-hope";
const __dirname = getDirname(import.meta.url);
export default {
theme: hopeTheme({
plugins: {
mdEnhance: {
// Add `@src` alias support
include: {
resolvePath: (file) => {
if (file.startsWith("@src"))
return file.replace("@src", path.resolve(__dirname, ".."));
return file;
},
},
},
},
}),
};
Кроме того, чтобы разместить ваши файлы Markdown непосредственно рядом с вашими реальными файлами, но не хотите, чтобы они отображались как страницы, вы можете установить параметры pagePatterns
в конфигурации VuePress. Дополнительные сведения смотрите в pagePatterns.
// .vuepress/config.ts
import { defineUserConfig } from "vuepress";
import { hopeTheme } from "vuepress-theme-hope";
export default defineUserConfig({
// now any file with `.snippet.md` extension will not be rendered as a page
pagePatterns: ["**/*.md", "!*.snippet.md", "!.vuepress", "!node_modules"],
theme: hopeTheme({
plugins: {
mdEnhance: {
include: true,
},
},
}),
});
// .vuepress/config.js
import { hopeTheme } from "vuepress-theme-hope";
export default {
// now any file with `.snippet.md` extension will not be rendered as a page
pagePatterns: ["**/*.md", "!*.snippet.md", "!.vuepress", "!node_modules"],
theme: hopeTheme({
plugins: {
mdEnhance: {
include: true,
},
},
}),
};