2

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');
4

1 に答える 1

11

あなたの問題は、それ__dirnameが に解決されていること/です。webpack で動作させるには、次のように設定します。

node: {
  __dirname: true
}

あなたのwebpack.config.jsで。それを追加した後、あなたのバンドルは私のためにうまく実行されます。

于 2016-11-23T23:55:23.410 に答える