NestJSアプリケーションをwebpackでBundle

NestJSアプリケーションをwebpackでBundle

2022-02-204 min read

目次

  1. 概要
  2. 環境
  3. 準備
  4. webpackでバンドル
  5. リンク

概要

NestJSで作成したアプリケーションをAWSのLambdaへデプロイする際にnode_modulesが肥大化しすぎてアップロードが困難になりました。

(Lambdaは250MBまでしかデプロイできないが、node_modulesを含めた全体のサイズが400MBを超えてしまった。)

なので、webpackによるbundle化を行いファイルサイズを圧縮しました。

その際の作業のメモです。

環境

  • nodejs 17.3.0
  • typescript 4.3.5
  • nestjs 8.0.0
  • webpack 5.66.0

準備

nest-cliをインストールします。

npm i -g @nestjs/cli

プロジェクト領域に移動しサンプルアプリを作成します。

その後開発サーバを起動し、 http://localhost:3000/Hello World!のレスポンスを確認します。

nest new sample-app
cd sample-app
npm run start

ビルドできるか確認しておきます。

ビルドが成功すると ./distにビルドされたファイルが格納されます。

npm run build

webpackでバンドル

webpack

webpackについて、NestJSはwebpack5に依存しているため追加での導入は不要です。

webpack.config.js の定義

webpack.config.jsを作成しリポジトリに配置します。

const { NODE_ENV = 'production' } = process.env;
module.exports = {
  target: 'node',
  mode: NODE_ENV,
  externals: [
    {
      '@nestjs/websockets/socket-module':
        'commonjs2 @nestjs/websockets/socket-module',
      '@nestjs/microservices/microservices-module':
        'commonjs2 @nestjs/microservices/microservices-module',
    },
  ],
  optimization: {
    minimize: false,
  },
};

externals の項目は利用するモジュールに合わせて適宜変更します。 またexternalsに定義したものはnode_modulesディレクトリから呼ばれることになります。

バンドル

package.jsonのbuild項目を次のように変更します。

変更前

"scripts": {
  // 略
  "build": "nest build",
  // 略
}

変更後

"scripts": {
  // 略
  "build": "nest build --webpack",
  // 略
}

実行

npm run build を行いバンドルファイルを生成します。

npm run start:prod もしくは node dist/main にて実行できるか確認します。

リンク

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項