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这类前端打包工具,体积更小也更稳定:
- 安装对应客户端(Linode对象存储兼容S3 API,以S3客户端为例)
npm install @aws-sdk/client-s3
- 在组件中引入并初始化客户端
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核心模块:
- 安装Rollup polyfill插件
npm install rollup-plugin-polyfill-node --save-dev
- 修改
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()] } } })
- 组件中正常引入并配置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
相关产品推荐
相关产品推荐

