如何整齐地限制Webpack`require.context`?

Juh*_*nen 6 javascript webpack

我正在Webpack和React上开发一个小的静态站点生成器.目前我正在变得更有活力.其中一部分是使其更具可配置性.

鉴于这样的网站结构

.
??? _book
??? assets
??? build
??? drafts
??? manuscript
??? node_modules
??? pages
??? project_source
??? styles
Run Code Online (Sandbox Code Playgroud)

我想要只从某些目录或目录中获取文件.在这种情况下,要求Markdown文件就足够了manuscript.天真var req = require.context('manuscript', true, /^\.\/.*\.md$/)会工作.

问题是,当我通过站点生成器配置传递目录时,这需要变为动态.由于require.context依赖于固定值,我认为我需要使用类似的东西将上下文更改为站点根目录var req = require.context('.', true, /^.*\.md$/),然后检查req.keys()以匹配我的配置.

在实践中,这将非常缓慢,因为它将遍历整棵树!特别是node_modules可以包含很多文件,这是应该不惜一切代价避免的.

有没有排除一个整洁的方式node_modules进行的require.context?虽然我对其他想法持开放态度,但我认为某种形式的正则表达式可能有效.

小智 9

你可以尝试:

var req = require.context('.', true, /^((?![\\/]node_modules|vendor[\\/]).)*\.md$/);
Run Code Online (Sandbox Code Playgroud)

从匹配中排除包含node_modulesvendor文件夹的路径.


Juh*_*nen 0

我最终通过将require.context静态站点生成器推到外部配置之外来解决问题。我那里有这样的小片段:

paths: {
    demo: {
        path: function() {
            return require.context('./demo', true, /^\.\/.*\.md$/);
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在生成器端我只使用这些上下文。

这不是我希望的解决方案,但它有效。