我们希望创建在AWS Lambda上运行的微型应用程序。我们正在调查webpack 2。但是,我们有遗留代码使用fs.readdirSync
来获取文件/模块名称列表以生成模块列表。执行捆绑包时,我们收到错误Error: ENOENT: no such file or directory, scandir '/innerLib'
,因为webpack不知道在文件fs.readdirSync(path.resolve(__dirname, 'innerLib'));
中执行lib/lib.js
并在捆绑时间内解析文件名数组。
我们可以使用wepback采用哪些方法,而无需对遗留代码进行重大更改。我在下面和github
中添加了一个简单示例webpack.config.js
var path = require( 'path' );
var webpack = require( 'webpack' );
module.exports = {
context: __dirname,
entry: ['./index.js'],
output: {
filename: 'bundle.js',
},
target: 'node',
}
index.js
const lib = require('./lib/lib.js');
lib.getModuleList((err, modules) => console.log(modules));
LIB / lib.js
const fs = require('fs');
const path = require('path');
let moduleList = [];
let list = fs.readdirSync(path.resolve(__dirname, 'innerLib'));
exports.getModuleList = getModuleList;
function getModuleList(callback) {
return callback(null, moduleList);
}
list.forEach(filename => {
moduleList.push({
name: filename
});
});
LIB / innerLib / a.js
console.log('a lib loaded');
LIB / innerLib / b.js
console.log('b lib loaded');
答案 0 :(得分:7)
您的问题是__dirname
正在解析为/
。要使其与webpack一起使用,请设置:
node: {
__dirname: true
}
在你的webpack.config.js中。添加之后,您的捆绑包对我来说很好。