webpack需要目录中的每个文件

yon*_*nmn 30 javascript webpack

这是我的文件结构

-main.js
-SomeDir
   -fileA.js
   -fileB.js
Run Code Online (Sandbox Code Playgroud)

如果我想main.jssomeDir不指定文件名的情况下 加载(内部)每个文件,我该怎么办?

类似的东西:require(./someDir/*.js)

yon*_*nmn 41

解:

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

额外:

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

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

  • 什么是ES6版本需要什么? (7认同)

Tud*_*soi 10

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

这是一个示例:

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
Run Code Online (Sandbox Code Playgroud)

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

http://www.webpackbin.com/Vy6AwkWrz

在你的情况下,第一行将是

var context = require.context('./SomeDir', false, /\.js$/);
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,这些链接已过时 (3认同)

Vyv*_*vIT 6

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

var req = require.context('./', true, /\.js$/);
req([]);
Run Code Online (Sandbox Code Playgroud)

然后在 main.js 中:

require('./SomeDir');
Run Code Online (Sandbox Code Playgroud)

或者

require('./SomeDir/index.js');
Run Code Online (Sandbox Code Playgroud)

甚至

import something from "./SomeDir";
Run Code Online (Sandbox Code Playgroud)

  • `req([])` 和像接受的答案一样在每个键上调用 `req` 之间有什么区别? (2认同)
  • `未捕获的错误:找不到模块''。`在`req([])`行,为什么它不起作用? (2认同)