我正在Webpack和React上开发一点static site generator。目前我正在使它变得更有活力。其中一部分是使其更具可配置性。
给定像这样的网站结构
.
├── _book
├── assets
├── build
├── drafts
├── manuscript
├── node_modules
├── pages
├── project_source
└── styles
我想要只从某些目录或目录中获取文件。在这种情况下,要求manuscript
的Markdown文件就足够了。天真地var req = require.context('manuscript', true, /^\.\/.*\.md$/)
会起作用。
问题是,当我通过站点生成器配置传递目录时,这需要变为动态。由于require.context
依赖于固定值,我认为我需要使用类似var req = require.context('.', true, /^.*\.md$/)
的内容将上下文更改为网站根目录,然后检查req.keys()
以匹配我的配置。
在实践中,这将非常缓慢,因为它将遍历整棵树!特别是node_modules
可以包含大量文件,这是应该不惜一切代价避免的。
是否有一种巧妙的方法可以将node_modules
排除在require.context
之外?我认为某些形式的正则表达式可能有效,尽管我对其他想法持开放态度。
答案 0 :(得分:8)
你可以尝试:
var req = require.context('.', true, /^((?![\\/]node_modules|vendor[\\/]).)*\.md$/);
从匹配项中排除包含node_modules
和vendor
文件夹的路径。
答案 1 :(得分:0)
我最终通过在静态站点生成器之外和外部配置中推送require.context
来解决问题。我有这样的小片段:
paths: {
demo: {
path: function() {
return require.context('./demo', true, /^\.\/.*\.md$/);
},
}
}
然后在发电机侧,我只是消耗这些上下文。
这不是我希望的解决方案,但它有效。