webpack 需要目录中的每个文件

webpack require every file in directory

这是我的文件结构

-main.js
-SomeDir
   -fileA.js
   -fileB.js

如果我想加载(在 main.js 内)someDir 中的每个文件而不指定文件名,我应该怎么做 -

类似于:require(./someDir/*.js) ?

解决方案:

var req = require.context("../someDir", true, /^(.*\.(js$))[^.]*$/igm);
req.keys().forEach(function(key){
    req(key);
});
// or just: req.keys().forEach(req)

额外:

正则表达式匹配 js 但忽略 test.js

/^(?!.*test.js)((.*\.(js\.*))[^.]*$)/igm)

一种方法是在 SomeDir 位置和该文件中创建一个 index.js 文件:

var req = require.context('./', true, /\.js$/);
req([]);

然后在 main.js:

require('./SomeDir');

require('./SomeDir/index.js');

甚至

import something from "./SomeDir";

是的,有可能,甚至在文件夹层次结构中递归

这是一个示例:

var context = require.context('./', true, /\.(html)$/);
var files={};

context.keys().forEach((filename)=>{
  console.log(filename);
  files[filename] = context(filename);
});
console.log(files); //you have file contents in the 'files' object, with filenames as keys

这里还有一个现场演示(打开 devtools 查看生成的对象)

http://www.webpackbin.com/Vy6AwkWrz

在你的例子中,第一行是

var context = require.context('./SomeDir', false, /\.js$/);

参考:https://webpack.github.io/docs/context.html#require-context

Webpack5 导致“webpack-context-dup-keys” Solution here 我们必须在下面使用 /./.*.md$/ 例如

 let ctxWrong   = require.context("../content/posts", true, /\.md$/);
 let ctxCorrect = require.context("../content/posts", true, /\.\/.*\.md$/); 

Please look at issue here