Webpack 包 ENOENT:没有这样的文件或目录 fs.readdirSync
Webpack bundle ENOENT: no such file or directory fs.readdirSync
我们想在 AWS Lambda 上创建 运行 的微型应用程序。我们正在为此调查 webpack 2。但是,我们有使用 fs.readdirSync
获取 file/module 名称列表以生成模块列表的遗留代码。当执行 bundle 时,我们得到一个错误 Error: ENOENT: no such file or directory, scandir '/innerLib'
因为 webpack 不知道在文件 lib/lib.js
中执行 fs.readdirSync(path.resolve(__dirname, 'innerLib'));
并在 bundle time 期间解析文件名数组。
我们可以在不对遗留代码进行重大更改的情况下使用 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');
您的问题是 __dirname
正在解析为 /
。要让它与 webpack 一起工作,请设置:
node: {
__dirname: true
}
在你的 webpack.config.js 中。添加之后,你的包对我来说执行得很好。
我们想在 AWS Lambda 上创建 运行 的微型应用程序。我们正在为此调查 webpack 2。但是,我们有使用 fs.readdirSync
获取 file/module 名称列表以生成模块列表的遗留代码。当执行 bundle 时,我们得到一个错误 Error: ENOENT: no such file or directory, scandir '/innerLib'
因为 webpack 不知道在文件 lib/lib.js
中执行 fs.readdirSync(path.resolve(__dirname, 'innerLib'));
并在 bundle time 期间解析文件名数组。
我们可以在不对遗留代码进行重大更改的情况下使用 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');
您的问题是 __dirname
正在解析为 /
。要让它与 webpack 一起工作,请设置:
node: {
__dirname: true
}
在你的 webpack.config.js 中。添加之后,你的包对我来说执行得很好。