2019-02-14に更新

Nuxt.js+Express+TypeORMでの環境構築でつまづいた所等の備忘録

久しぶりにフルNode.jsの環境を構築したら色々ハマったので備忘録を書いておきます。とりあえずローカル環境での実行と、ローカル環境でのproductionビルドと起動が成功するまでを動くところまでの話になります。知識不足により正しい解決方法ではないものや、対応方法によっては今後また別の問題が出る可能性がある箇所などもあるかもしれませんので、あくまでも細かい部分の問題解決方法のヒントになるかも、くらいの認識で見ていただいた方が良いと思います。

下記のような構成です。

  • Nuxt.js 2.4
  • Express 4
  • TypeORM 0.2
  • 開発はts-node
  • productionビルドでサーバー側はdistフォルダにビルド

以前書いたこのあたりの記事で作ったプロジェクトの作り方と大体同じです。(この時は同様のエラーは出なかったのですが…)

Nuxt.js+ExpressのプロジェクトをTypeScript化する

commonjs設定にしたらエラーが出た

TypeORMの解説の通りtsconfig.jsonのmodule設定をcommonjsにしたら、vueコンポーネントのexport defaultしているところで下記のようなエラーが出てビルドできなくなりました。

export 'default' … was not found

よく分からなかったのでとりあえずmoduleはes2015に戻し、nodemon.jsonでts-nodeを実行している箇所で下記のようにmoduleを上書きするようにしました。

  "exec": "ts-node -O '{\"module\": \"commonjs\"}' ./server/index.ts"

あとはproductionビルド用にpackage.jsonのbuildスクリプトも下記のようにしました。

    "build": "tsc --module commonjs && node copy_statics.js && cross-env NODE_ENV=production nuxt build",

これで動くならtsconfig.jsonを変えるだけで動いてくれよという感じですが…。僕の何かがおかしいだけかもしれませんのでまた時間が経ったら試してみる予定です。

productionビルド後の実行でエラー

TypeORMが上手く動かずエラーになってしまいました。エラーログを見るとなぜかビルドしたjsのentityファイルでなく、ビルド前のtsファイルの方をimportしていたようです。

outDirを指定している場合だけかもしれませんが、とにかくormconfigを修正して対処しました。ormconfigはjsonファイルでなくormconfig.jsファイルとして書いています。

let path = 'src';
if (process.env.NODE_ENV == 'production') {
  path = 'dist/' + path
}
module.exports = {
  entities: [
    `${path}/entity/**/*{.ts,.js}`
  ],
  migrations: [
    `${path}/migration/**/*{.ts,.js}`
  ],
  subscribers: [
    `${path}/subscriber/**/*{.ts,.js}`
  ],

ただまあここは環境変数が使えるのでそちらにした方が楽そうな気がします。

CLI

今度はCLIでもエラーが出るようになるので、こちらも-Oオプションが必要です。面倒ですね…。良い対処方法があれば教えてください。

まとめ

とりあえず開発が進められるところまでエラーをざっと取りました。他に正しい対応方法などある可能性もありそうなのでまたそのうち確認します。

というかTypeORMいいなと思って使ってみましたがまだバージョン0.2なんですね。今後バージョンアップも必要そうですし、まだまだ色々何かしら問題が出てくるかもしれません。


だら@Crieit開発者

Crieitの開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント