标签: clasp

在本地安装的IDE中启用Google Apps脚本的自动填充功能

我正在尝试使用clasp在本地构建GAS项目

https://github.com/google/clasp

任何本地安装的IDE都是对Google脚本编辑器的巨大改进,因此该工具看起来非常有前景.遗憾的是,GAS服务的自动完成功能似乎不包含在软件包中.

文件说:

Apps Script CLI使用TypeScript在开发时提供自动完成和linting.使用类似Visual Studio Code的IDE进行TypeScript自动完成.

完成所有必需的依赖项后,我仍然无法使用自动完成功能.当我为现有项目执行"clasp pull"命令时,它将".gs"扩展名转换为".js".自动填充建议只是解析现有代码的结果.

例如,如果我在我的代码中的某处调用了sheet.getRange(),那么'getRange()'方法会在建议中弹出,但我不能列出可用的选项,比如,PropertiesService,除非它已经在我的码.

有没有人为Google Apps脚本启用自动填充功能有什么好运?

google-apps-script visual-studio-code clasp

15
推荐指数
5
解决办法
6479
查看次数

将 Typescript 与 Google Apps Script 结合使用

我想将 Typescript 用于我的 Google Apps Script (GAS) 项目,但我找不到将我的代码编译为 GAS 接受的内容的方法。

GAS 不支持导出,而且 Typescript 似乎不喜欢通过全局范围访问变量(它需要导入/要求,从而导出)。

我正在寻找以下任何一种解决方案,我相信这些解决方案对我有用:

1) Babel 插件或类似的可以删除所有 Import 和 Export 语句及其属性名称(要求我不使用相同的方法名称,我不使用。

所以:

import MyLibrary from './library';
export function greetJohn() { MyLibrary.greet('John'); }
export default { greetJohn }
Run Code Online (Sandbox Code Playgroud)

变成:

function greetJohn() { greet('John'); }
Run Code Online (Sandbox Code Playgroud)

2)更改打字稿,使其可以看到全局范围

3) Babel 插件或类似的将所有 .ts 文件组合成一个 .js 文件并通过将每个文件视为对象/函数来转换导入/导出语句。

commonjs google-apps-script typescript clasp

11
推荐指数
3
解决办法
4802
查看次数

Google Apps 脚本和 Cloudbuild CI 登录

因此,我非常困难,但非常接近于通过 Googles Cloudbuild 使用 Clasp 推送和部署 Google Apps Script 项目。因此推送和部署命令来自Googles Clasp cli,它要求您使用clasp login. 登录将在您的主目录中创建一个~/.clasprc.json使用您的凭据调用的文件。这是推送和部署所必需的。在中,cloudbuild.yaml我创建了一个替换_CLASPRC来保存这个文件的内容,并在运行构建时使用我自己的自定义图像将它写入容器。

现在对于这个问题,当 push 命令运行时,我收到以下错误,这基本上不是说我没有登录或.clasprc.json. 由于这是我遇到的唯一错误,无论问题是什么,这个问题有点难以调试。

Could not read API credentials. Are you logged in globally?
Run Code Online (Sandbox Code Playgroud)

我曾尝试将 放在.clasprc.json主目录和项目目录中,但两种方式都遇到相同的问题。我很确定该文件正在写入项目目录,因为当我尝试在我的本地运行时没有.clasp.json它抱怨它在抱怨我没有登录之前丢失了。当.clasp.json它在那里时它只抱怨我没有登录在。

该项目只是我的一个个人项目,它在 Github 上都是开源的,所以如果你想参考实际代码,这里是实际项目的链接。我的 Lil Admin和我使用的构建器My Builders。但是,您确实不需要该项目,请按照以下步骤在本地进行重现。

  1. 确保创建了 GCP 项目并启用了启用 Apps Script API的gcloud cli
  2. 有扣 cli npm install -g @google/clasp
  3. clasp login获得.clasprc.json与GCP权威性
  4. clasp create --title "My …

continuous-integration google-apps-script google-cloud-platform clasp google-cloud-build

7
推荐指数
1
解决办法
652
查看次数

使用 CLASP 测试 GAS 时如何模拟依赖项

背景

我最近了解了CLASP,并对使用TDD在本地编辑我的Google Apps 脚本(GAS)的可能性感到兴奋。

注意:可能有一种方法可以使用现有的 GAS 编辑器编写测试,但如果可能的话,我更愿意使用现代编辑器

clasp 效果很好,但我不知道如何模拟单元测试的依赖项(主要是通过jest,尽管我很高兴使用任何有效的工具)

  • 我通过使用gas-local包获得了最远的距离,并且能够在测试中模拟单个依赖项
    • 但是我找不到在单个测试/调用中模拟多个依赖项的方法,所以我创建了这个问题

挑战

尽管安装了@types/google-apps-script,但我不清楚如何分别“要求”或“导入”Google Apps Script 模块是使用 ES5 还是 ES2015 语法——请参见下面的说明。

相关的 StackOverflow 帖子

虽然在测试单元中的相似,所以问题在这里,大部分的内容/评论似乎是从预扣时代,我无法在一个解决方案,同时跟进余下的引线到达。(当然,我未经训练的眼睛很可能漏掉了一些东西!)。

尝试

使用gas-local

正如我上面提到的,在使用 gas-local 时尝试模拟多个依赖项后,我创建了一个问题(见上面的链接)。我的配置类似于jest.mock我在下面描述的测试,但值得注意的是以下差异:

  • 我使用 ES5 语法进行gas-local测试
  • 我的包配置可能略有不同

使用 jest.mock

LedgerScripts.test.js

import { getSummaryHTML } from "./LedgerScripts.js";
import { SpreadsheetApp } from '../node_modules/@types/google-apps-script/google-apps-script.spreadsheet';

test('test a thing', () => {
    jest.mock('SpreadSheetApp', () => {
        return jest.fn().mockImplementation(() …
Run Code Online (Sandbox Code Playgroud)

tdd unit-testing google-apps-script jestjs clasp

6
推荐指数
1
解决办法
618
查看次数

以编程方式访问执行脚本

我需要像访问 Logger 日志一样访问 Execution Transcripts。例如,我可以Logger.log使用getLogs(). 如何以类似的方式访问执行脚本?

google-apps-script google-apps-script-api clasp

5
推荐指数
0
解决办法
295
查看次数

使 VSCode 语法突出显示接受 Google Apps Script Scriptlets

我将 VS Code 与 clasp 结合使用以在 Google Apps Script 中进行开发。

在or标签内使用scriptlet会干扰 VS Codes 语法突出显示:<script><style>

编辑器片段

此外,我经常收到 html-language-server 错误。

有没有办法解决这个问题?

一个设置可能会教 VS Code 我做什么很好?

google-apps-script visual-studio-code clasp

5
推荐指数
1
解决办法
268
查看次数

如何在Apps Script中优雅地协作?

因此,我所在的团队由 2-3 名开发人员组成,他们将主要使用连接到 Google 表格的 Apps 脚本。

我研究了各种工具/工作流程,但似乎没有一种优雅的方式让两个人同时处理同一个 Apps 脚本文件:

  • 如果两个人都在在线编辑器上编辑同一个文件并保存更改,则只有一组更改会被保留,而另一组更改将被覆盖。这是有道理的,但我希望当多个编辑器处理同一个文件时能获得类似 Google 文档的体验。
  • 本地开发和版本控制git也不是一个很好的选择,因为迭代地进行更改并测试这些更改需要它在云上(因为我们依赖 Google Sheets)。您无法在本地进行更改并测试以查看这些更改的效果,除非clasp push每次都进行调用,然后在云上的本机 Apps 脚本 GUI 中运行代码。
  • 我已经相当彻底地阅读了 Apps 脚本文档(部署、版本控制、协作等),但没有什么可以作为解决此问题的优雅解决方案(似乎总结了“使用共享 Google 云端硬盘”和“使用git”...) 。

我很好奇是否有人有在团队环境中使用 App Script 工作的经验以及最终使用了哪些工作流程。团队如何让 2 个人以上处理同一个文件,同时允许快速迭代,而无需调用clasp pull/push每次迭代?或者这是不可避免的?

collaboration google-sheets google-apps-script clasp

5
推荐指数
1
解决办法
1142
查看次数

在 TypeScript 文件中使用 Google Script 类型注释变量(使用 clasp)

我正在使用clasp 工具编写Google Apps 脚本 (GAS),该工具可让您在本地开发编译为 Google 脚本的 TypeScript 文件。

我通过运行导入了 Google Script 类型定义npm i -S @types/google-apps-script,并且我的 IDE(VS Code)似乎确实能够理解 Google Script 类型。然而,我似乎无法用这些类型定义来注释我的变量。例如,

let ss: Spreadsheet;
ss = SpreadsheetApp.getActive();
Run Code Online (Sandbox Code Playgroud)

是否可以使用这些导入的类型定义来注释我的代码?

javascript google-apps-script typescript clasp

4
推荐指数
1
解决办法
1731
查看次数

检索访问令牌时出错:TypeError:无法读取未定义的属性“project_id”

我是扣扣新手。

通过以下方式初始登录后:clasp login 我可以登录 script.google.com 接下来,我创建了一个项目并通过以下方式推送文件:clasp push

现在,我已使用以下方式注销:clasp logout

这里需要帮助:现在,如果我正在尝试:

clasp 登录 --creds ./.clasp.json

我收到“检索访问令牌时出错:TypeError:无法读取未定义的属性‘project_id’”。

请指导我如何通过 --creds 登录?

clasp

4
推荐指数
1
解决办法
6415
查看次数

doGet/doPost 触发器函数事件对象是否有类型定义?

我正在尝试使用 CLASP将 Google Script 转换为Web App

doGet(e)/doPost(e)中的“e”对象是否有现有的类型定义,我可以在打字稿 /clasp 方面使用它?

triggers web-applications google-apps-script typescript clasp

3
推荐指数
1
解决办法
504
查看次数