Node.js脚本在Docker中导入依赖失败:SyntaxError问题排查
Node.js Docker容器中
SyntaxError: Unexpected Identifier问题(import语句报错) 本地运行正常的Node.js脚本,迁移到Ubuntu 20.04的Docker容器后,执行时遇到SyntaxError: Unexpected Identifier错误,指向第一个import语句。脚本首行代码:
// bla.js import puppeteer from 'puppeteer'
Dockerfile配置及报错信息如提问所示,本地执行npm ci和node bla.js完全正常。
问题根源
Ubuntu 20.04官方软件源提供的Node.js版本较低(通常为v10.x或v12.x),这些旧版本默认不支持ES模块的import语法;而你本地使用的是较新的Node.js版本,因此能正常解析该语法。
解决方案
方案1:改用官方Node.js镜像(推荐)
直接使用Node官方镜像,它默认提供较新的Node版本,配置更简洁,无需手动处理依赖安装。修改后的Dockerfile示例:
FROM node:18-bookworm WORKDIR /buildspace COPY package*.json ./ RUN npm ci COPY . . CMD ["node", "bla.js"]
可根据你的需求和puppeteer兼容性,选择合适的Node版本标签(如16、20等)。
方案2:在Ubuntu镜像中升级Node.js版本
若必须基于Ubuntu 20.04镜像,需将Node.js升级到v14及以上版本(支持ES模块),可通过NodeSource源安装:
修改Dockerfile中的安装步骤:
FROM ubuntu:20.04 ARG DEBIAN_FRONTEND=noninteractive RUN mkdir -p buildspace WORKDIR ./buildspace # 安装curl并添加NodeSource源,安装指定版本Node.js RUN apt-get update && apt-get upgrade -y && \ apt-get install -y curl && \ curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y nodejs COPY package*.json ./ RUN npm ci COPY . . CMD ["node", "bla.js"]
可将setup_18.x替换为setup_16.x、setup_20.x等,选择适配的Node版本。
方案3:配置package.json启用ES模块(需配合新版本Node)
如果容器内Node版本已支持ES模块(v12.17+或v14+),可在package.json中添加字段,让Node将.js文件当作ES模块处理:
在package.json中添加:
{ "type": "module", // 原有其他字段... }
注意:此方法需配合较新的Node版本,若使用Ubuntu默认旧版本Node,该配置无效。
内容的提问来源于stack exchange,提问作者MojioMS
相关产品推荐
相关产品推荐

