导入googleapis/google-auth-library时触发isTTY未定义TypeError问题
问题
使用Node.js和Vue开发时,导入googleapis或google-auth-library库后控制台持续报错:TypeError: Cannot read properties of undefined (reading 'isTTY'),不确定是否需要安装额外依赖或改用require解决。
相关代码(已提前导入fs):
// 上传CSV文件到Google Drive(目前暂未实现功能) async function uploadToDrive(folderId){ console.log("messing up here?"); const{GoogleAuth} = await import('google-auth-library'); const{google} = await import("googleapis") // 获取凭证并构建服务 const auth = new GoogleAuth({scopes: "https://www.googleapis.com/auth/drive.file"}); const service = google.drive({version: "v3", auth}); // 设置folderId并上传csv folderId = "1HyC6zKH98n0OzDhmhKWJkupdxY-Knd1k"; // 从downloadData函数复制的代码 if (selectedEntry === undefined) return; if (downloadLink === undefined) return; // 确保链接存在 downloadLink.href = widgets.makeDownloadLink({ header: selectedEntry.header, values: filterRecords(true) }); const fileMetadata = { Name: selectedEntry.header, parents: [folderId] }; const media = { mimeType: "text/csv", body: fs.createReadStream(`files/${downloadLink.href}`), }; try { const file = await service.files.create({ requestBody: fileMetadata, media: media, fields: "id", }); console.log("File Id:", file.data.id); return file.data.id; } catch (err) { // TODO(开发者) - 处理错误 throw err; } }
控制台错误日志:
chunk-OCKVXT67.js?v=fbea541c:2930 <Suspense> is an experimental feature and its API will likely change. InspectorContainer.vue:35 messing up here? chunk-APNZTO2G.js?v=fbea541c:16065 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'isTTY') at _Colours.isEnabled (chunk-APNZTO2G.js?v=fbea541c:16065:23) at _Colours.refresh (chunk-APNZTO2G.js?v=fbea541c:16068:37) at node_modules/google-logging-utils/build/src/colours.js (chunk-APNZTO2G.js?v=fbea541c:16109:13) at __require (chunk-4RDJM6KU.js?v=fbea541c:18:50) at node_modules/google-logging-utils/build/src/logging-utils.js (chunk-APNZTO2G.js?v=fbea541c:16157:21) at __require (chunk-4RDJM6KU.js?v=fbea541c:18:50) at node_modules/google-logging-utils/build/src/index.js (chunk-APNZTO2G.js?v=fbea541c:16405:18) at __require (chunk-4RDJM6KU.js?v=fbea541c:18:50) at node_modules/gcp-metadata/build/src/index.js (chunk-APNZTO2G.js?v=fbea541c:16446:18) at __require (chunk-4RDJM6KU.js?v=fbea541c:18:50)
解决方案
这个错误本质是google-logging-utils库在浏览器环境下尝试访问Node.js专属的process.stdout.isTTY属性,但浏览器中不存在process对象导致的。你当前是在Vue前端代码中直接调用为Node.js后端设计的Google API库,这是核心矛盾。
具体解决方法:
方案一:将Google Drive操作移至后端(推荐)
- 用Express等框架搭建Node.js后端服务,把
uploadToDrive逻辑放到后端代码里。 - 前端Vue通过HTTP请求调用后端接口,由后端完成文件上传到Google Drive的操作。
- 后端环境存在
process对象,不会触发该错误,同时还能避免在前端暴露Google认证凭证的安全风险。
- 用Express等框架搭建Node.js后端服务,把
方案二:改用浏览器兼容的Google API客户端
使用Google官方提供的浏览器端API库,按照浏览器端的授权、文件上传逻辑实现功能,避开依赖Node.js环境的库。临时调试修复(不推荐生产环境)
如果只是临时调试,可以在导入Google库前手动模拟process对象:// 放在导入google-auth-library/googleapis之前 window.process = { stdout: { isTTY: false }, env: {} };但这种方法可能引发其他未知问题,且存在安全隐患,不建议用于正式项目。
内容的提问来源于stack exchange,提问作者Moosterbox
相关产品推荐
相关产品推荐

