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

Express项目集成AdminJS报错:Cannot use import statement outside a module

解决AdminJS在CommonJS项目中的导入报错问题

问题描述

在基于Express.js和PostgreSQL的frogbase项目中添加AdminJS时,按照官方文档使用import语句引入@adminjs/express,运行app.js时出现以下报错:

SyntaxError: Cannot use import statement outside a module
完整报错栈:

import AdminJSExpress from '@adminjs/express'
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (node:internal/vm:77:18)
    at wrapSafe (node:internal/modules/cjs/loader:1287:20)
    at Module._compile (node:internal/modules/cjs/loader:1339:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1434:10)
    at Module.load (node:internal/modules/cjs/loader:1206:32)
    at Module._load (node:internal/modules/cjs/loader:1022:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:142:12)
    at node:internal/main/run_main_module:28:49

Node.js v21.5.0

不想将项目改为ES模块(即不添加"type": "module"到package.json),也不想使用TypeScript,需要找到适配方案。

解决方案

项目默认是CommonJS模块规范,直接改用require()语法替代ES模块的import即可,具体调整如下:

1. 替换AdminJS相关包的导入方式

将原来的ES模块导入代码:

import AdminJS from 'adminjs'
import AdminJSExpress from '@adminjs/express'

替换为CommonJS的require写法:

const AdminJS = require('adminjs')
const AdminJSExpress = require('@adminjs/express').default

注意:@adminjs/express的CommonJS导出需要追加.default,因为该包的ES模块默认导出在CommonJS环境下会被封装在default属性中。

2. 其他AdminJS适配器的导入调整

如果使用了适配PostgreSQL的AdminJS插件(比如@adminjs/sequelize或@adminjs/pg),同样改用require并按需添加.default:

// 示例:导入Sequelize适配器
const AdminJSSequelize = require('@adminjs/sequelize').default

3. 保持后续代码的CommonJS语法一致性

确保AdminJS实例创建、路由挂载的代码符合CommonJS规范,示例如下:

const express = require('express')
const app = express()

// 初始化AdminJS实例
const adminJs = new AdminJS({
  databases: [/* 你的PostgreSQL数据库实例 */],
  rootPath: '/admin'
})

// 构建AdminJS的Express路由
const router = AdminJSExpress.buildRouter(adminJs)

// 挂载AdminJS路由
app.use(adminJs.options.rootPath, router)

app.listen(3000, () => {
  console.log('Server running on port 3000')
})

4. 确认依赖安装正确性

确保已安装所有必要依赖:

npm install adminjs @adminjs/express
# 若使用Sequelize连接PostgreSQL,需额外安装适配器
npm install @adminjs/sequelize

关键说明

AdminJS官方文档默认展示ES模块语法,但它完全支持CommonJS环境,仅需调整导入方式即可,无需修改项目的模块系统类型,也不需要引入TypeScript。

内容的提问来源于stack exchange,提问作者Md. Sabik Alam Rahat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:37:50