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

Vite+Vue项目引入aws-sdk报错:Uncaught ReferenceError: global is not defined

解决Vite Vue项目中aws-sdk生产打包报错的问题

推荐方案:改用AWS SDK for JavaScript v3

aws-sdk v2是为Node.js环境设计的,前端适配性较差;v3采用模块化架构,天生适配Vite这类前端打包工具,体积更小也更稳定:

  1. 安装对应客户端(Linode对象存储兼容S3 API,以S3客户端为例)
npm install @aws-sdk/client-s3
  1. 在组件中引入并初始化客户端
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

// 替换为你的Linode对象存储配置
const s3Client = new S3Client({
  region: "us-east-1",
  endpoint: "https://us-east-1.linodeobjects.com", // Linode对应区域的Endpoint
  credentials: {
    accessKeyId: "你的Linode访问密钥",
    secretAccessKey: "你的Linode密钥密码"
  }
});

// 示例:上传文件到存储桶
async function uploadFile(file) {
  const command = new PutObjectCommand({
    Bucket: "你的存储桶名称",
    Key: file.name,
    Body: file
  });
  const response = await s3Client.send(command);
  console.log("上传成功", response);
}

兼容方案:继续使用aws-sdk v2的正确配置

如果必须保留v2版本,需要通过插件补全前端环境缺失的Node.js核心模块:

  1. 安装Rollup polyfill插件
npm install rollup-plugin-polyfill-node --save-dev
  1. 修改vite.config.js配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import polyfillNode from 'rollup-plugin-polyfill-node'

export default defineConfig({
  plugins: [vue()],
  define: {
    'process.env': {},
    global: 'window'
  },
  build: {
    rollupOptions: {
      plugins: [polyfillNode()]
    }
  }
})
  1. 组件中正常引入并配置Linode环境
import AWS from 'aws-sdk'

AWS.config.update({
  region: "us-east-1",
  endpoint: "https://us-east-1.linodeobjects.com",
  credentials: {
    accessKeyId: "你的Linode访问密钥",
    secretAccessKey: "你的Linode密钥密码"
  }
})

const s3 = new AWS.S3()
// 后续正常调用S3 API即可

为什么之前的方案失效?

  • 仅配置global: "window"只能解决开发环境的全局变量缺失,但生产打包时Rollup会把aws-sdk依赖的Node.js核心模块(如crypto、http)标记为外部依赖,导致打包失败
  • 将aws-sdk设为外部依赖会让生产环境找不到对应模块,必须通过polyfill插件补全前端环境缺失的Node.js模块

内容的提问来源于stack exchange,提问作者legousk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:20:40