Now.shにNuxt.jsのアプリケーションをデプロイしようとしたときのバージョンエラーメモ


`npx create-nuxt-app <app名>`で作成したNuxt.jsアプリケーションをNow.shにデプロイしようとした時の話です。

## 基本

公式の[Now へデプロイするには？](https://ja.nuxtjs.org/faq/now-deployment)を見つつプロジェクトのルートに`now.json`を作成するだけです。

```now.json
{
  "version": 2,
  "builds": [
    {
      "src": "nuxt.config.js",
      "use": "@nuxtjs/now-builder",
      "config": {}
    }
  ]
}
```

あとはnowコマンドでデプロイされます。

```bash
$ now
```

## Node.jsのバージョンでハマる

こんな感じでエラーが

```bash
> Deploying ~/dotstudio/playground/xxxxxxxx under n0bisuke
> Using project gahaku
> Synced 1 file (504B) [498ms]
> https://xxxxxxxx.now.sh [v2] [809ms]
> Error! Build failed
> Error! Check your logs at https://xxxxxxxxxxxxxx.now.sh/_logs or run `now logs xxxxxxxxxxxxxx.now.sh
```

ログをのぞいてみたら、Now.sh上のNode.jsのバージョンがデフォで`8.10.x
`なんだけど、依存モジュールが8.12.0以上欲しい、みたいなエラーが出てました。

```log
missing `engines` in `package.json`, using default range: 8.10.x
Using yarn
ℹ Prepare build took: 188.356777 ms
 ----------------- Install devDependencies ----------------- 
Running yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --modules-folder=/tmp/c428239/node_modules --cache-folder=/tmp/c428239/.now_cache/yarn
yarn install v1.17.3
[1/5] Resolving packages...
[2/5] Fetching packages...
error execa@2.0.4: The engine "node" is incompatible with this module. Expected version "^8.12.0 || >=9.7.0". Got "8.10.0"
error Found incompatible module.
```

### enginesはnow.jsonではなくpackage.jsonに

`now.json`内にenginesを記載したら怒られました。

```bash
$ now

・
・
・
> Error! The property `engines` is not allowed in now.json when using Now 2.0 – please remove it.
```

### Now.shは現時点で8系か10系しか使えなかった

`package.json`にenginesを指定することはわかったので現時点最新の`"engines": { "node": "12.10.0" }`を指定したところ怒られました。

```log
downloading cache...
 ----------------- Prepare build ----------------- 
Downloading files...
Working directory: /tmp/22f71c4b
Error: found `engines` in `package.json` with an unsupported node range: 12.10.0
please use `10.x` or `8.10.x` instead
    at Object.getSupportedNodeVersion (/tmp/5c75e02affa7ea9e/.build-utils/node_modules/@now/build-utils/dist/index.js:19096:23)
    at getNodeVersion (/tmp/5c75e02affa7ea9e/.build-utils/node_modules/@now/build-utils/dist/index.js:21035:27)
    at <anonymous>
worker exited with code 20 and signal null
done
```

`10.x` or `8.10.x`って言われてますね

### 10.xx.xxの指定は出来ずに10.xだと通った

12系が使えないことが分かったので、`"engines": { "node": "10.16.3" }`を指定したところ怒られました。

```log
 ----------------- Prepare build ----------------- 
Downloading files...
Working directory: /tmp/fee663a
Found `engines` in `package.json`, selecting range: 10.x
Using yarn
ℹ Prepare build took: 192.035346 ms
 ----------------- Install devDependencies ----------------- 
Running yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --modules-folder=/tmp/fee663a/node_modules --cache-folder=/tmp/fee663a/.now_cache/yarn
yarn install v1.17.3
[1/6] Validating package.json...
error gahaku@1.0.0: The engine "node" is incompatible with this module. Expected version "10.16.3". Got "10.16.0"
```

10.16は大丈夫だけど10.16.3はダメらしい。

## 結局

`package.json`に`  "engines": { "node": "10.16" },`を書くことで解消しました。

迷路の[右手法](https://www.weblio.jp/content/右手法)のように試すたびにエラーが出てました苦笑