Nuxt.jsをUniversalモードで利用するためにAWS&Serverlessフレームワークを活用している方向けです。
Serverlessフレームワークを活用するときに使われるAWSLambdaはアップロードできるファイルサイズに上限があります。Lambdaにアップロードできるファイルのサイズは圧縮前で250MB、圧縮後で50MBです。
Nuxt.js+TypeScript+Serverlessの構成ではこれを余裕で超えてしまいます。
実際、Lambdaは250MBまでと言いながら350MBくらいまで上げられるのでしばらく放置していたのですが、ついにそれすら超えてしまうようになりアップロード出来なくなってしまったので対策を打つことにしました。
対策方法
対策方法はズバリ「lamndaで使うやつ以外アップロードしない」です。当たり前の話なのですが、serverless.ymlのexcludeDevDependencies
をtrueにしても、どうやら全てが正しくexcludeされているようには見えなかったので、いっそのこと自分たちで全て選ぶようにしてexcludeDevDependencies
をfalseにしました。
package.jsonのdependenciesにはlambda上のnuxtで利用するもののみを入れ、それ以外は全てdevDependenciesに移動させました。
ブラウザ側で本番環境で使われる
- vee-validate
- vue-lazyload
- hooper
などをも使っており、通常はdependenciesに入れるものではありますが、ここらへんも割り切ってdevDependenciesに移動させました。
リリースコマンドも
rm -rf node_modules
npm i --production
sls deploy --stage prod
というように変更し、dependencies以外のライブラリーが絶対にserverlessのpackageに入らないようにしました。
結果
ファイルサイズを60MBほど少なくすることが出来、excludeDevDependencies
をfalseにしたことで、リリースにかかる時間が6分から1分半へと劇的に改善しました。