2016-11-23 4 views
1

Мы хотели бы создать микро приложения, которые запускаются на 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 и разрешить массив имен файлов во время расслоения.Webpack bundle ENOENT: нет такого файла или каталога fs.readdirSync

Какие подходы мы можем предпринять с помощью 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.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 
    }); 
}); 

Библиотека/innerLib/a.js

console.log('a lib loaded'); 

Библиотека/innerLib/b.js

console.log('b lib loaded'); 
+0

как вы выполняете комплект? –

ответ

3

Ваша проблема заключается в том, что __dirname является разрешающие /. Для того, чтобы заставить его работать с WebPack, установите:

node: { 
    __dirname: true 
} 

в вашем webpack.config.js. Добавив это, ваш комплект отлично подходит для меня.

Смежные вопросы