久しぶりにフルNode.jsの環境を構築したら色々ハマったので備忘録を書いておきます。とりあえずローカル環境での実行と、ローカル環境でのproductionビルドと起動が成功するまでを動くところまでの話になります。知識不足により正しい解決方法ではないものや、対応方法によっては今後また別の問題が出る可能性がある箇所などもあるかもしれませんので、あくまでも細かい部分の問題解決方法のヒントになるかも、くらいの認識で見ていただいた方が良いと思います。
下記のような構成です。
以前書いたこのあたりの記事で作ったプロジェクトの作り方と大体同じです。(この時は同様のエラーは出なかったのですが…)
Nuxt.js+ExpressのプロジェクトをTypeScript化する
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を変えるだけで動いてくれよという感じですが…。僕の何かがおかしいだけかもしれませんのでまた時間が経ったら試してみる予定です。
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でもエラーが出るようになるので、こちらも-Oオプションが必要です。面倒ですね…。良い対処方法があれば教えてください。
とりあえず開発が進められるところまでエラーをざっと取りました。他に正しい対応方法などある可能性もありそうなのでまたそのうち確認します。
というかTypeORMいいなと思って使ってみましたがまだバージョン0.2なんですね。今後バージョンアップも必要そうですし、まだまだ色々何かしら問題が出てくるかもしれません。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント