Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9409

【Node.js】バージョンが古くてfetchが使えんのお

$
0
0
はじまり Node.jsのための環境を以下の記事のように立ち上げました。 そして、そのまま、fetchを使ったスクリプトが動くかどうかを試してみたのですが、 何か自分のスクリプトとは違うエラー(Unexpected Identifierみたいな)が出現しました。 そこで調べてみてこんな記事を見つけました。 そこには、importを使うスクリプトの拡張子は.mjsでなければならないと書いてあったのですが、 fetchはメジャーなモジュールなので、流石にそんなヤバい挙動を2年も引き摺っていないだろうと思いました。 恐らく、Node.jsのバージョンを上げれば直るだろうと思い、この記事を書きました。 今回、立ち上げた環境は、ubuntuです。 問題のやつ これが出てきたエラー画面です。 「SyntaxError: Unexpected Identifier」が出てきてから色々調べましたが、上述の記事くらいしか良さげなものが見つかりませんでした。fetchモジュールのファイルの中でエラー起きるとかマジですか。。。 なので、原因というものは見つかりませんでしたが、 このときに使用していたNode.jsのバージョンが「10.19.0」であり、2020-02-05にリリースされたものでした。 2022-01-03時点で、推奨版が「16.13.1」なのでバージョンアップすれば直るのではと思いました。 モジュールのバージョンアップ モジュールをバージョンアップする処理もDockerfileに加えました。 Dockerfile(バージョンアップしないバージョン) FROM ubuntu:latest RUN apt-get update RUN apt-get install nodejs -y RUN apt-get install npm -y RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10 ADD package.json . ADD index.js . CMD npm run start Dockerfile(バージョンアップするバージョン) FROM ubuntu:latest RUN apt-get update # for install n RUN apt install -y curl # install old nodejs and npm RUN apt-get install nodejs -y RUN apt-get install npm -y # for version up nodejs RUN npm install -g n RUN n 16.13.1 # uninstall old nodejs and npm RUN apt-get purge nodejs npm -y # for version up npm RUN npm install -g npm RUN npm update -g # to avoid "npm ERR! Tracker "idealTree" already exists" WORKDIR /usr/app COPY ./ /usr/app # module etc... RUN npm install node-fetch --save # not need "update-alternatives" if "n" package manager # RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10 # to get files from local ADD package.json . ADD index.mjs . ADD README.md . # CMD npm run start これで仮想マシンをBuildしたら動くのかと思いきや、またエラーが出てきてしまいました。 index.js import fetch from 'node-fetch'; どうやら、.mjsを使わないとimportできない問題は顕在中のようです。 しょうがないので拡張子を変えたら、ES6で動いていたスクリプトがやっと動きました! fetchが動きました! 時間掛かった~! index.mjs import fetch from 'node-fetch'; fetchモジュールの方は、mjsファイルにする方ではなく、package.jsonに"type": "module"を追加することで、index.jsの状態でも使えるようにしてるみたいです。 おしまい すんごい困ったら新しいバージョンにしてみる。 新しいバージョンの方がエラーメッセージも分かりやすい。 importしたファイルは.mjsファイルにする。

Viewing all articles
Browse latest Browse all 9409

Trending Articles