может ли webpack сгенерировать один json-файл frontmatter из нескольких точек входа уценки?

У меня есть webpack.config.js который использует динамическую точку входа для получения файлов разметки в папке:

module.exports = {
  async entry() {
    // get a list of .mdx files
    const mdxFiles = await glob('./content/**/*.md{,x}', { dot: devMode })
      // map each file to a "pretty" keyed tuple
      .then(list => list.map(filename => [filename.replace(/\.mdx?$/, ''), filename]))
      .then(Object.fromEntries) // into an object
    return { main: './src/client/index', ...mdxFiles } 
    // semantically i'd prefer mdxFiles was an array, but this
    // is the easiest way to get separate output files for each input
  },
  // more webpack config...
}

используя собственный загрузчик из документации mdx:

const matter = require('gray-matter')
const stringifyObject = require('stringify-object')
module.exports = function mdxLoader(src) {
  const { content, data } = matter(src)
  return `export const frontMatter = ${stringifyObject(data)};\n\n${content}`
}

это преобразует уценку в jsx, а затем в вызовы React, используя @mdx-js/loader а также babel-loader. Фронтматтер в каждом файле уценки преобразуется в

export const metadata = { title: "hello world", description, ...etc};

// export default MDXComponent...

Я пытаюсь написать собственный плагин для извлечения всех метаданных в один файл, но, насколько я могу судить, весь контекст синтаксического анализа babel потерян, и код представляет собой просто большую строку javascript, готовую к записи на диск.

Вместо взлома парсинга регулярных выражений, как лучше всего извлечь эти метаданные? export из каждого файла в один объект, который нужно преобразовать в строку и добавить в манифест webpack?

0 ответов

Другие вопросы по тегам