NestJSアプリケーションをwebpackでBundle
2022-02-203 min read
目次
概要
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
にて実行できるか確認します。
リンク
Recommends
New Posts
Hot posts!
Date
Tags
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author