问题标签 [clasp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
120 浏览

json - 在 clasp.json 中设置 rootDir 后,使用 clasp.push 推送谷歌应用脚​​本失败

我首先在绑定电子表格下开发了 google sheet 插件。我使用Visual Studio Codeandclasp将更改推送到服务器。

现在我将项目迁移到另一个谷歌帐户并独立运行,以便将其发布到市场。这就是我所做的:

  1. 在新的google账户GAS中创建了一个空脚本项目,以便为新项目生成新的scriptID

  2. 在 Windows 开发机器上本地复制根项目文件夹,包括其子文件夹和文件。

  3. 打开新的项目文件夹Visual Studio Code

  4. 更新新本地项目中 clasp.json 中的新 scriptID。

  5. 删除 rootDir:src 标签。没有什么特别的原因,我还没有完全明白我在做什么

  6. 使用 clasp 登录新帐户并将项目推送到服务器。我注意到脚本编辑器上的所有文件名现在都以 src\ 文件夹开头。可能是因为以上。见截图。在此处输入图像描述

  7. 此外,在启动“新”插件时运行 - 作为插件进行测试。它没有找到与HtmlService.createTemplateFromFile("T1");T1 是 html 文件一起使用的主 html 文件。更改为HtmlService.createTemplateFromFile("src/T1");(将 * src*添加到文件名),并且可以,但是找不到“下一个”文件(外部 css 文件)。

  8. 我通过添加 back 修改了 clasp.json "rootDir":"src"。所以现在 clasp.json 和所有文件夹结构与原始项目相同。但是由于某种原因,将此推送到服务器失败。由于clasp.json被修改提示询问:

    清单文件已更新。您要推送和覆盖吗?(是/否)

似乎clasp push(批准后)的输出首先包括全部或部分代码,作为 json 类型输出的一部分,最后有一些错误。最后,所有 21 个项目文件都被列为成功签入。见屏幕截图。claps push没有时"rootDir":"src",它看起来还可以。clasp push > a.log由于需要批准,将 输出重定向到文件(查看所有输出)是不可能的。在此处输入图像描述

0 投票
5 回答
419 浏览

bash - 使用 Bash 脚本并行运行多个 Google Apps Script clasp 命令

我有数百个 Google Apps 脚本项目和各种 Bash 脚本,用于使用clasp工具(一个 Node.js 应用程序)管理项目。许多脚本需要clasp pull先在本地拉取项目,然后再对本地文件执行一些操作,所以我有一个脚本,它遍历本地 clasp 项目文件夹并clasp pull在每个文件夹上运行。该循环按顺序遍历目录,因此如果拉取一个项目需要 3-4 秒,那么每 100 个项目运行它最终需要 5-6 分钟。

我的目标是能够clasp pull并行运行命令,使它们同时启动,并且能够知道哪些项目被成功拉取,哪些项目被拉取失败。

给定这样的目录结构:

这个pull_all.shBash 脚本:

运行此脚本时,它会为每个目录输出“Pulling project”行,然后给出 shell 提示,暗示脚本已完成执行。但是在没有用户做任何事情的情况下,3-4 秒后它显示了所有clasp pull命令的输出(显然是并行运行,因为命令的一些输出是乱序/重叠的),然后挂起,并且没有给出新的外壳提示符。此时我必须按 ctrl+c 来终止脚本。

完整的输出最终看起来像这样:

要强制其中一个脚本失败,我可以在任何文件中将其更改scriptId为无效的脚本 ID 。.clasp.json在这种情况下,我确实看到了预期的输出:

...但它仍然与其他输出混合在一起,并且不清楚来自哪个项目。

我怎样才能做到这一点:

  1. 该脚本在执行脚本期间不会导致出现新的 shell 提示。
  2. 该脚本输出一行指示每个clasp pull操作的成功或失败,由项目的目录名称(.clasp.json找到文件的位置)引用。
  3. 奖励:抑制输出,clasp pull因此脚本仅显示每个项目的成功或失败结果(由目录名称引用)。

注意:我已经提到clasp pull了一个示例命令,但一个有效的解决方案将允许我在 bash while 循环中将任何 clasp 命令作为后台进程运行,包括但不限于clasp push,clasp deploy等。

0 投票
0 回答
82 浏览

typescript - 我想要一个用 Typescript 和 Jest 为 Google Apps Script 的 Logger.log 方法编写的模拟函数

我想在本地笔记本电脑上使用 Jest 测试用 TypeScript 编写的 Google Apps 脚本代码。代码有一个特定于 GAS 的方法调用,Logger.log我必须给测试人员一个模拟函数。

要测试的代码./src/code.ts

测试代码./__tests__/code.spec.ts

当我执行时,我希望测试能够运行并成功npx jest,但我得到了:

当我./src/code.ts使用编译时npx tsc,它成功了。删除发出的文件后./src/code.js,我npx jest再次运行,然后出现相同的消息。

测试人员似乎在远程文件中找到了函数的定义,但没有在同一个文件hello中找到类。Logger这看起来很奇怪和好奇。

我应该怎么做才能让模拟类Logger及其方法log工作。

环境:

命令 版本
节点 16.13.0
表扣 2.4.1
tsc 4.4.4
笑话 27.3.1

./package.json

./jest.config.js

我试过了:

  • 设置globals和保持类Logger

    ./jest.config.js

    结果如下:

    Logger定义,而我的定义Logger.log不起作用。

  • 设置globals和定义Logger.log

    ./__tests__/code.spec.ts

    这导致了TypeError.

  • 取消设置globals并保留课程Logger

  • 取消设置globals和定义Logger.log

    这导致ReferenceError.

  • 设置globals,保持类和设置间谍:

    ./__tests__/code.spec.ts

    这导致了TypeError.

  • 设置globals、定义Logger.log和设置间谍:

    那件事发生了TypeError

  • 取消globals设置,保留类并设置间谍:

    那个结果ReferenceError

  • 取消设置globals,定义Logger.log和设置间谍:

    这导致ReferenceError.

下表总结了这些结果:

globals 模拟类型 间谍 错误类型
类记录器 X 类型错误
记录器.log X 类型错误
未设置 类记录器 X 参考错误
未设置 记录器.log X 参考错误
类记录器 类型错误
记录器.log 类型错误
未设置 类记录器 参考错误
未设置 记录器.log 参考错误
0 投票
1 回答
28 浏览

google-apps-script - 如何验证当前帐户扣件登录到什么?

我正在使用clasp在各种谷歌帐户下使用 Visual Studio Code 开发谷歌应用脚​​本项目。因此,每当我将项目切换到工作时,我可能需要从当前帐户注销 -clasp logout并登录clasp login到另一个帐户。

有没有办法检查当前帐户扣是什么登录?

0 投票
1 回答
54 浏览

google-apps-script - 有没有办法使用 clasp 将代码绑定到多个 GAS 进行测试?

我处理了很多与不同人的谷歌表格相关的谷歌脚本。最近我一直在尝试转向使用 Clasp 和 VS Code,以便更轻松地保留历史记录并添加到 Github。这很棒,因为它有助于简化我的流程,但是,我工作的大部分 GAS 都与用于其他人业务的工作表相关联,这意味着如果我推送错误代码,我可能会搞砸他们的业务。

我不想直接推送到“生产脚本”而不先使用我构建的虚拟表以及我的虚拟日历和虚拟电子邮件测试代码。这意味着我首先要将代码推送到我的“虚拟脚本”,对其进行测试,然后在准备好后,将代码推送到“生产工作表”。

有没有办法做到这一点?我看过,但似乎没有人和我自己有类似的需求,因为大多数人使用 clasp 推送脚本,然后在测试后部署它们。我的需求不同,因为当我推送代码时,它会立即生效,不会部署。对此问题的任何帮助将不胜感激。

0 投票
1 回答
48 浏览

typescript - Clasp - 在 Typescript 中使用环境变量机密进行 Google Apps 脚本开发

有没有一种简单的方法可以不在 Google Apps 脚本项目中对机密进行硬编码?

如本指南中所述,我正在使用 clasp 并在 Typescript 中进行开发。

Main.ts目前,我的脚本(

0 投票
0 回答
26 浏览

typescript - 从另一个文件导入自定义函数时如何修复“ReferenceError: procglobal is not defined”?

我正在开发一个简单的模板项目,用于使用 TypeScript、CLASP 和 Webpack + gas-webpack-plugin 在 Google Apps 脚本中创建新的 Web 应用程序。

一切正常,直到我尝试引用我在另一个文件中编写的函数,在这种情况下,updateTable在我的表单处理程序中;Webpack 编译没有问题,但是 GAS 抱怨procglobal没有定义。

我很确定这与我的 Webpack 配置有关,但我一点也不知道从哪里开始寻找。

表格/code.ts

表/code.ts

代码.ts

webpack.config.js

webpack 生成的代码


如果我从中删除该updateTable功能form/code.ts,则procglobal消失...

表格/code.ts:

新的 webpack 生成代码:

0 投票
1 回答
13 浏览

answer-set-programming - 如何在cligo中编写涉及某个参数的约束?

我正在尝试解决 Google ASP Competition 2019:保险裁判分配问题。此链接中提供了问题。

有一个硬性约束,如果裁判的偏好类型为 0,那么案件将不会分配给该裁判。我已将问题简化为包含一些变量。

case(cid)指以 cid 为 case id 的 case。
ref(rid)指具有裁判ID的裁判。

pref(rid, type)接受裁判“摆脱”的偏好,类型取值从 0 到 3。数字越大,越有可能受理此案。

ref(10, 3)ref(9, 2)中,将给予更高的优先级ref(10)

我尝试了以下 cligo 代码:

但是,当我运行命令时,它显示令人满意,但只输出这个

我究竟做错了什么?

0 投票
0 回答
42 浏览

typescript - 当我使用装饰器时,转译的 JavaScript 代码失败

EDIT1:我在这里
创建了一个最小的复制存储库, 代码和复制步骤在存储库中可用。
EDIT2:当我将转译的代码嵌入到 html 文件中时,也会发生同样的错误。

---来自这里的原始问题---

我正在使用 Clasp + Typescript + Webpack + Babel 在本地使用 npm 库开发 GAS。
直到我在我的项目中使用装饰器,它工作正常。但是,使用装饰器(更准确地说,类验证器)会导致 GAS 出现以下错误...

有谁知道如何避免上述错误?

这是示例代码和配置。