Sveltekit/mdsvex:如何获取导入Markdown文件的文本长度?
获取Markdown文件原始文本长度的解决方案
你当前通过import加载Markdown文件时,得到的是经过编译处理后的结果(通常是渲染后的HTML内容或组件对象),而非文件的原始文本字符串,所以content不是字符串类型,自然没有length属性。
要获取原始Markdown文本的长度,需要直接读取文件的原始内容,而非通过import加载。可以使用Node.js的fs/promises模块实现:
import { resolve } from 'path'; import { readFile } from 'fs/promises'; import { fileURLToPath } from 'url'; export const prerender = "auto"; export async function load({ params }) { // 获取当前文件的绝对路径,用于拼接md文件的完整路径 const __filename = fileURLToPath(import.meta.url); const __dirname = resolve(__filename, '..'); // 拼接Markdown文件的绝对路径 const mdFilePath = resolve(__dirname, 'md-files', `${params.slug}.md`); // 读取原始Markdown文本 const rawContent = await readFile(mdFilePath, 'utf-8'); // 获取文本长度 const contentLength = rawContent.length; // 如果仍然需要编译后的内容用于渲染,可保留原import逻辑 const post = await import(`../md-files/${params.slug}.md`); const compiledContent = post.default; return { compiledContent, rawContent, contentLength }; }
说明:
readFile会读取文件的原始UTF-8文本,此时rawContent为字符串类型,可直接通过length获取文本长度。- 用
fileURLToPath和resolve处理路径,避免相对路径在不同环境下的定位问题,确保能准确找到md-files目录下的目标文件。 - 若同时需要编译后的内容用于页面渲染,可保留原
import逻辑,两者互不冲突。
内容的提问来源于stack exchange,提问作者Wessi
相关产品推荐
相关产品推荐

