【Node.js】的版本太旧了,无法使用fetch
开始
我按照以下文章的方式搭建了适用于Node.js的环境。
然后,我尝试使用fetch功能来测试脚本是否能够运行,但是出现了与我的脚本不同的错误(类似于Unexpected Identifier)。
在这方面,我进行了一番调查,找到了这样一篇文章。
那篇文章里写着,使用import语句的脚本必须以.mjs作为扩展名,但由于fetch是一个常用的模块,我觉得它不可能持续两年这样糟糕的行为。我猜想只要升级Node.js的版本就可以解决问题,所以我写下了这篇文章。
这次我们所使用的操作系统是ubuntu。
这个问题的那个人
出现「SyntaxError: Unexpected Identifier」后,我进行了一些调查,但除了上述的文章之外,没有找到其他好的资源。有人说在fetch模块的文件中出现了错误,是真的吗?因此,虽然我没有找到具体的原因,但在那个时候我使用的Node.js版本是「10.19.0」,它是在2020年02月05日发布的。截至2022年01月03日,推荐的版本是「16.13.1」,所以我认为如果升级版本应该就能解决问题。
模块版本更新
我已经将模块升级的处理过程添加到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
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
当我构建了虚拟机后,本以为它会运行起来,但是却又遇到了错误。
import fetch from 'node-fetch';
看起来似乎不能使用.mjs文件进行导入,这个问题正在显现中。
我只能改文件扩展名,然后ES6的脚本终于可以运行了!fetch也可以正常工作了!真是花了好长时间啊!
import fetch from 'node-fetch';
据我了解,与其将fetch模块改为mjs文件,更好的做法是在package.json中添加”type”: “module”,以便在index.js的情况下也可以使用。
结束了 (Jieshu le)
-
- すんごい困ったら新しいバージョンにしてみる。
-
- 新しいバージョンの方がエラーメッセージも分かりやすい。
- importしたファイルは.mjsファイルにする。