【Node.js】的版本太旧了,无法使用fetch

开始

我按照以下文章的方式搭建了适用于Node.js的环境。

然后,我尝试使用fetch功能来测试脚本是否能够运行,但是出现了与我的脚本不同的错误(类似于Unexpected Identifier)。

在这方面,我进行了一番调查,找到了这样一篇文章。

那篇文章里写着,使用import语句的脚本必须以.mjs作为扩展名,但由于fetch是一个常用的模块,我觉得它不可能持续两年这样糟糕的行为。我猜想只要升级Node.js的版本就可以解决问题,所以我写下了这篇文章。

这次我们所使用的操作系统是ubuntu。

这个问题的那个人

20220103_01.jpg

出现「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ファイルにする。
广告
将在 10 秒后关闭
bannerAds