如何从动态目录中使用webpack来要求JavaScript

Ale*_*ite 22 require webpack

我有一些老式的普通旧ES5 JavaScript,我需要将其作为捆绑器使用webpack.问题是这些文件的位置在路径为动态的文件夹中.似乎webpack在表达式中不能很好地工作,require并且require.context根本不允许它们.

对于要求目录及其子目录中的所有文件的已知路径目录,此方法可以正常工作:

let domainRequires = require.context('./app/domain', true, /\.js$/); domainRequires.keys().forEach(domainRequires);

由于我不能使用表达式require.context,我尝试使用普通require,它不工作:

require('../../path/to/code/my-library-' + versionNumber + '/domain/clazz.js');

使用完整的相对路径.

我也尝试使用require.context但增强正则表达式部分以使其工作并且没有运气:

require.context('../../path/to/code', true, /^my-library-.*\/domain\/.*\.js$/);

欢迎任何想法,建议或解决方案.如果我需要在webpack中使用第三方,那也没关系.

Ale*_*ite 16

我最终搞清楚了.通过使用webpack resolve.alias,我可以添加:

resolve: {
  alias: {
    common: path.resolve(__dirname, '../../path/to/code/my-library-' + versionNumber + '/domain')
  }
}
Run Code Online (Sandbox Code Playgroud)

webpack.config.

然后在我的代码中,我可以要求/domainvia 下的所有文件:

var commonRequires = require.context('common', true, /\.js$/);
commonRequires.keys().forEach(commonRequires);
Run Code Online (Sandbox Code Playgroud)

同样,我可以通过以下方式获取单个文件:

require('common/clazz.js'); // ../../path/to/code/my-library-1.0.0/domain/clazz.js
Run Code Online (Sandbox Code Playgroud)

FWIW,让versionNumber我使用node的fs模块从json文件中读取,使用JSON.parse(file)然后检索顶部的版本webpack.config