我有一些老式的、普通的、老式的ES5 JavaScript,我需要将其放入我的应用程序中,该应用程序将使用webpack作为一个绑定器。问题是这些文件的位置在一个动态路径的文件夹中。看来,在require
和require.context
中的表达式中,webpack并不能很好地工作,它根本不允许这样做。
对于需要某个目录及其子目录中的所有文件的已知路径目录,这种方法适用于
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一起使用第三方软件,也没问题。
发布于 2016-11-11 05:18:28
我最终弄明白了这一点。通过使用webpack resolve.alias
,我可以添加以下内容:
resolve: {
alias: {
common: path.resolve(__dirname, '../../path/to/code/my-library-' + versionNumber + '/domain')
}
}
在webpack.config
中。
然后,在我的代码中,我可以通过以下方式请求/domain
下的所有文件:
var commonRequires = require.context('common', true, /\.js$/);
commonRequires.keys().forEach(commonRequires);
同样,我可以通过以下方式获得单个文件:
require('common/clazz.js'); // ../../path/to/code/my-library-1.0.0/domain/clazz.js
最后,为了获得versionNumber
,我使用node的fs
模块读取json文件,使用JSON.parse(file)
,然后在webpack.config
的顶部检索版本
发布于 2017-12-13 21:01:05
从Webpack 3.9 (我认为)开始,commonRequires
是不需要的。我在webpack.config.js中运行以下代码:
resolve: {
alias: {
tmpDir: path.resolve(__dirname, '/tmp')
}
}
然后我加载我的自定义模块如下:
const dynModule = require('tmpDir/dyn_module.js');
我不确定我是否遗漏了您的需求中的什么,但是我不需要commonRequires
,而Webpack构建得很好(并且它很好用)。
https://stackoverflow.com/questions/40426912
复制相似问题