You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:25:11