diff --git a/packages/vant-markdown-loader/src/extract-demo.js b/packages/vant-markdown-loader/src/extract-demo.js index 58eaf4ef1..b142fce78 100644 --- a/packages/vant-markdown-loader/src/extract-demo.js +++ b/packages/vant-markdown-loader/src/extract-demo.js @@ -1,22 +1,33 @@ const path = require('path'); +const fs = require('fs'); +const parser = require('./md-parser'); + +function hyphenate(str) { + return str.replace(/\B([A-Z])/g, '-$1').toLowerCase(); +} module.exports = function extraDemo(content) { + const markdownDir = path.dirname(this.resourcePath); const demoLinks = []; - /* - * 提取 README 中的 demo 文件路径,例如下面的内容,就会提取为 ['./demo-link/index.vue'] - * ```demo - * ./demo-link/index.vue - * ``` - */ content = content.replace( - /
([\s\S]*?)<\/code><\/pre>/g,
- function (_, link) {
+ /([\s\S]*?)<\/demo-code>/g,
+ function (_, attrs, link) {
link = link.trim(); // 去换行符
- demoLinks.push(link);
- const demoFileName = path.basename(link, '.vue'); // 获取文件名
- const tag = demoFileName.replace(/\B([A-Z])/g, '-$1').toLowerCase(); // 驼峰转连字符
- return `<${tag} />`;
+ const tag = hyphenate(path.basename(link, '.vue'));
+ const fullLink = path.join(markdownDir, link);
+ demoLinks.indexOf(fullLink) === -1 && demoLinks.push(fullLink);
+ const demoContent = fs.readFileSync(fullLink, { encoding: 'utf8' });
+ const demoParseredContent = parser.render(
+ '```html\n' + demoContent + '\n```'
+ );
+ return `
+
+ <${tag} />
+
+ `;
}
);
diff --git a/packages/vant-markdown-loader/src/index.js b/packages/vant-markdown-loader/src/index.js
index 3b4f31a61..849b166bc 100644
--- a/packages/vant-markdown-loader/src/index.js
+++ b/packages/vant-markdown-loader/src/index.js
@@ -1,24 +1,20 @@
const path = require('path');
const loaderUtils = require('loader-utils');
-const MarkdownIt = require('markdown-it');
-const markdownItAnchor = require('markdown-it-anchor');
const frontMatter = require('front-matter');
-const highlight = require('./highlight');
+const parser = require('./md-parser');
const linkOpen = require('./link-open');
const cardWrapper = require('./card-wrapper');
const extractDemo = require('./extract-demo');
const sideEffectTags = require('./side-effect-tags');
-const { slugify } = require('transliteration');
function camelize(str) {
return str.replace(/-(\w)/g, (_, c) => (c ? c.toUpperCase() : ''));
}
function wrapper(content) {
- const markdownDir = path.dirname(this.resourcePath);
let demoLinks;
let styles;
- [content, demoLinks] = extractDemo(content);
+ [content, demoLinks] = extractDemo.call(this, content);
[content, styles] = sideEffectTags(content);
content = cardWrapper(content);
return `
@@ -31,9 +27,7 @@ function wrapper(content) {