Rozwijam trochę static site generator na górze Webpack i React. Obecnie robię to bardziej dynamicznie. Jedną z części jest to, że jest bardziej konfigurowalny.Jak starannie dopasować Webpack `require.context`?
Biorąc pod uwagę strukturę witryny jak to
.
├── _book
├── assets
├── build
├── drafts
├── manuscript
├── node_modules
├── pages
├── project_source
└── styles
chciałbym wymagają tylko pliki z określonym katalogu lub katalogów. W tym przypadku wystarczy wymagać plików Markdown z manuscript
. Naiwny var req = require.context('manuscript', true, /^\.\/.*\.md$/)
zadziałałby.
Problem polega na tym, że musi to stać się dynamiczne, gdy przechodzę przez katalog poprzez konfigurację generatora witryn. Ponieważ require.context
opiera się na ustalonych wartościach, uważam, że muszę zmienić kontekst na katalog główny strony, używając czegoś takiego jak var req = require.context('.', true, /^.*\.md$/)
, a następnie sprawdzić pod kątem req.keys()
, aby dopasować się do mojej konfiguracji.
W praktyce jest to bardzo powolne, ponieważ będzie przemierzać całe drzewo! Szczególnie node_modules
może zawierać wiele plików i jest to coś, czego należy unikać za wszelką cenę.
Czy istnieje sposób na wyłączenie node_modules
z require.context
? Przypuszczam, że jakaś forma Regexa może działać, chociaż jestem otwarty na inne pomysły.
Czy wywołanie 'require.context' powoduje zastąpienie poprzedniego kontekstu? –
@OlimSaidov Magia powinna się wydarzyć pod adresem [paths.js] (https://github.com/antwarjs/antwar/blob/f8e4061fa10494e40a7fbd12125ec8bd1fc645fd/paths.js). 'config' mapuje do konfiguracji strony (podaję tam ścieżki). Powinienem móc ustawić kontekst w funkcji 'allPosts'. Mam nadzieję, że to wyjaśni sytuację. –
Czy możesz przeglądać katalogi za pomocą 'fs.readdirSync' i wywoływać' require.context' ignorując folder 'node_modules'? –