webpackでディレクトリ構造を維持する

やりたいこと

  • webpackを利用して各ページ用に1ファイルずつまとめたい。
  • ディレクトリ構造を維持したまま決まったファイル名のパターンでファイルをまとめたい。
src/
├── js
│   ├── testdir
│   │   ├── testmain.js
│   │   └── testsub.js
│   ├── testmain.js
│   └── testsub.js
└── ts
    ├── testdir
    │   ├── testmain.ts
    │   └── testsub.ts
    ├── testmain.ts
    └── testsub.ts
dist/
├── testdir
│   └── testmain.js
└── testmain.js

globで複数のファイルをentryに指定する

参考: webpackのentryファイルを複数指定、globパッケージの使い方

globを利用して複数のファイルを指定する。

[webpack.config.js]

glob.sync("./src/js/**/*.js"
    ).map(function (key) {
        entries[key] = key;
    }
);

module.exports = {
    module: {
        ...
    entry: entries,
        ...
    }
}
dist/
└── src
    └── js
        ├── testdir
        │   ├── testmain.js
        │   └── testsub.js
        ├── testmain.js
        └── testsub.js


出力フォルダがおかしいため調整する。

[webpack.config.js]

const srcDir = "./src/js/";
glob.sync("./src/js/**/*.js"
  ).map(function (key) {
      entries[path.relative(srcDir, key)] = key;
    }
);

module.exports = {
    module: {
        ...
    entry: entries,
        ...
    }
}
dist/
├── testdir
│   ├── testmain.js
│   └── testsub.js
├── testmain.js
└── testsub.js


ファイル名をワイルドカードでパターン指定する。

[webpack.config.js]

const srcDir = "./src/js/";
glob.sync("./src/js/**/*main.js"
  ).map(function (key) {
      entries[path.relative(srcDir, key)] = key;
    }
);

module.exports = {
    module: {
        ...
    entry: entries,
        ...
    }
}
dist/
├── testdir
│   └── testmain.js
└── testmain.js