W środowisku Apps Script i kodzie JavaScript środowisko wykonawczy lub środowisko wykonawczy zawiera kod JavaScript, który analizuje i wykonuje kod skryptu. Środowisko wykonawcze zawiera reguły dotyczące uzyskiwania dostępu do pamięci, sposobu interakcji programu z systemem operacyjnym komputera oraz składni programu zgodnie z prawem. Każda przeglądarka ma środowisko wykonawcze JavaScript.
W przeszłości skrypt Apps Script był hostowany przez narzędzie Mozilla's Rhino JavaScript. Rhino zapewniał wygodny sposób wykonywania skryptów dla programistów, ale dodatkowo łączył się z konkretną wersją JavaScriptu (ES5). Deweloperzy Apps Script nie mogą korzystać z nowoczesnej składni JavaScriptu i funkcji w skryptach za pomocą środowiska wykonawczego Rhino.
Aby rozwiązać ten problem, Apps Script jest teraz obsługiwany przez środowisko wykonawcze V8, które obsługuje Chrome i Node.js. Możesz przenieść istniejące skrypty do V8, aby korzystać z nowoczesnej składni i funkcji JavaScriptu.
Na tej stronie opisujemy nowe funkcje włączone w V8 i sposób ich użycia w skryptach. Migracja skryptów do wersji 8 zawiera instrukcje migracji istniejących skryptów do środowiska wykonawczego V8.
Funkcje środowiska wykonawczego V8
Skrypty, które korzystają ze środowiska wykonawczego V8, mogą korzystać z tych funkcji:
Nowoczesna składnia ECMAScript
W skryptach obsługiwanych przez środowisko wykonawcze V8 możesz używać nowoczesnej składni ECMAScript. Ta składnia obejmuje let
, const
i wiele innych popularnych funkcji.
Zobacz przykłady składni V8, aby zobaczyć krótką listę popularnych ulepszeń składni, które możesz wykorzystać w środowisku wykonawczym V8.
Ulepszone wykrywanie funkcji
Wykrywanie funkcji Apps Script jest łatwiejsze w przypadku skryptów używających V8. Nowy środowisko wykonawcze rozpoznaje te formaty definicji funkcji:
function normalFunction() {} async function asyncFunction() {} function* generatorFunction() {} var varFunction = function() {} let letFunction = function() {} const constFunction = function() {} var namedVarFunction = function alternateNameVarFunction() {} let namedLetFunction = function alternateNameLetFunction() {} const namedConstFunction = function alternateNameConstFunction() {} var varAsyncFunction = async function() {} let letAsyncFunction = async function() {} const constAsyncFunction = async function() {} var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {} let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {} const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {} var varGeneratorFunction = function*() {} let letGeneratorFunction = function*() {} const constGeneratorFunction = function*() {} var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {} let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {} const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {} var varLambda = () => {} let letLambda = () => {} const constLambda = () => {} var varAsyncLambda = async () => {} let letAsyncLambda = async () => {} const constAsyncLambda = async () => {}
Metody wywoływania obiektów z aktywatorów i wywołań zwrotnych
Skrypty korzystające z V8 mogą wywoływać metody obiektów i klasy statyczne z miejsc, w których można wywoływać metody biblioteki. Są to między innymi:
- Google Workspace dodatek reguły pliku manifestu
- Aktywatory możliwe do zainstalowania
- Pozycje menu w Google Workspace edytorach
- Funkcje wywołania zwrotnego użytkownika, takie jak opisane w przykładowym kodzie
ScriptApp.newStateToken()
.
Poniższy przykład wersji V8 pokazuje użycie metod obiektów podczas tworzenia elementów menu w Arkuszach Google:
function onOpen() {
var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
ui.createMenu('Custom Menu')
.addItem('First item', 'menu.item1')
.addSeparator()
.addSubMenu(ui.createMenu('Sub-menu')
.addItem('Second item', 'menu.item2'))
.addToUi();
}
var menu = {
item1: function() {
SpreadsheetApp.getUi().alert('You clicked: First item');
},
item2: function() {
SpreadsheetApp.getUi().alert('You clicked: Second item');
}
}
Wyświetl logi
Apps Script zapewnia 2 usługi logowania: usługę Logger
i klasę console
. Obie te usługi zapisują logi w tej samej usłudze Stackdriver Logging.
Aby wyświetlić logi Logger
i console
, u góry edytora skryptów kliknij Dziennik wykonywania.
Wyświetl wykonania
Aby wyświetlić historię wykonywania skryptu, otwórz projekt Apps Script i po lewej stronie kliknij Wykonywanie
.Przykłady składni V8
Poniżej znajduje się krótka lista popularnych funkcji składniowych dostępnych w skryptach za pomocą środowiska wykonawczego V8.
let
i const
Słowa kluczowe let
i const
umożliwiają zdefiniowanie odpowiednio lokalnych zmiennych zakresu zablokowanego i blokowanie stałych zakresu.
// V8 runtime let s = "hello"; if (s === "hello") { let s = "world"; console.log(s); // Prints "world" } console.log(s); // Prints "hello" const N = 100; N = 5; // Results in TypeError |
Funkcje strzałek
Funkcje strzałek pozwalają kompaktowo definiować funkcje w wyrażeniach.
// Rhino runtime function square(x) { return x * x; } console.log(square(5)); // Outputs 25 |
// V8 runtime const square = x => x * x; console.log(square(5)); // Outputs 25 // Outputs [1, 4, 9] console.log([1, 2, 3].map(x => x * x)); |
Zajęcia
Klasa umożliwia koncepcyjnie uporządkowanie kodu za pomocą dziedziczenia. Klasy w wersji V8 to głównie cukier składni zamiast dziedziczenia oparte na prototypowym kodzie JavaScript.
// V8 runtime class Rectangle { constructor(width, height) { // class constructor this.width = width; this.height = height; } logToConsole() { // class method console.log(`Rectangle(width=${this.width}, height=${this.height})`); } } const r = new Rectangle(10, 20); r.logToConsole(); // Outputs Rectangle(width=10, height=20) |
Niszczenie projektów
Wyrażenia zniszczenia przypisań pozwalają szybko rozpakować wartości z tablic i obiektów do różnych zmiennych.
// Rhino runtime var data = {a: 12, b: false, c: 'blue'}; var a = data.a; var c = data.c; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var x = a[0]; var y = a[1]; var z = a[2]; console.log(x, y, z); // Outputs 1 2 3 |
// V8 runtime var data = {a: 12, b: false, c: 'blue'}; var {a, c} = data; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var [x, y, z] = array; console.log(x, y, z); // Outputs 1 2 3 |
Litery szablonu
Literały szablonów to literały ciągu, które zezwalają na umieszczone wyrażenia. Pozwalają one unikać bardziej złożonych instrukcji łączenia ciągów znaków.
// Rhino runtime var name = 'Hi ' + first + ' ' + last + '.'; var url = 'http://localhost:3000/api/messages/' + id; |
// V8 runtime var name = `Hi ${first} ${last}.`; var url = `http://localhost:3000/api/messages/${id}`; |
Parametry domyślne
Parametry domyślne pozwalają określić wartości domyślne parametrów funkcji w deklaracji funkcji. Może to uprościć kod w treści funkcji, ponieważ nie ma potrzeby bezpośredniego przypisywania wartości domyślnych do parametrów.
// Rhino runtime function hello(greeting, name) { greeting = greeting || "hello"; name = name || "world"; console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
// V8 runtime var hello = function(greeting="hello", name="world") { console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
Ciągi wielowierszowe
Możesz zdefiniować ciągi wielowierszowe, korzystając z tej samej składni co literatury szablonu. Podobnie jak w przypadku literałów szablonów, ta składnia pozwala uniknąć łączenia ciągów znaków i upraszcza ich definicje.
// Rhino runtime var multiline = "This string is sort of\n" + "like a multi-line string,\n" + "but it's not really one."; |
// V8 runtime var multiline = `This on the other hand, actually is a multi-line string, thanks to JavaScript ES6`; |
Włączam środowisko wykonawcze V8
Jeśli skrypt używa środowiska wykonawczego Rhino, możesz przełączyć je na wersję V8, wykonując te czynności:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Włącz środowisko wykonawcze Chrome V8.
Środowisko wykonawcze skryptu możesz też określić bezpośrednio, edytując plik manifestu skryptu:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Show "appsscript.json" plik manifestu w edytorze.
- Po lewej stronie kliknij Edytor
appsscript.json
.
> - W pliku manifestu
appsscript.json
ustaw w poluruntimeVersion
wartośćV8
. - U góry kliknij Zapisz projekt .
W artykule Migracja skryptów do wersji 8 znajdziesz inne instrukcje, które pomogą Ci prawidłowo skonfigurować skrypt w wersji 8.
Włączam środowisko wykonawcze Rhino
Jeśli Twój skrypt korzysta z wersji V8 i chcesz go przełączyć na korzystanie z oryginalnego środowiska wykonawczego Rhino, wykonaj te czynności:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Odznacz pole wyboru Włącz środowisko wykonawcze Chrome V8.
Możesz też edytować plik manifestu skryptu:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Show "appsscript.json" plik manifestu w edytorze.
- Po lewej stronie kliknij Edytor
appsscript.json
.
> - W pliku manifestu
appsscript.json
ustaw w poluruntimeVersion
wartośćDEPRECATED_ES5
. - U góry kliknij Zapisz projekt .
Jak przenieść obecne skrypty?
Przewodnik po migracji skryptów do wersji 8 zawiera opis czynności, które musisz wykonać, aby przenieść dotychczasowy skrypt do wersji 8. Obejmuje to włączenie środowiska wykonawczego V8 i sprawdzenie skryptu pod kątem ewentualnych znanych niezgodności.
Automatyczna migracja skryptów do V8
18 lutego 2020 r. Google zacznie stopniowo przenosić dotychczasowe skrypty, które przeszły nasz automatyczny test zgodności do wersji 8. Po migracji skrypty, które zostały zablokowane, będą działać normalnie.
Jeśli chcesz wyłączyć automatyczną migrację skryptu, ustaw w pliku manifestu pole runtimeVersion
na DEPRECATED_ES5
. W dowolnym momencie możesz ręcznie przenieść skrypt do wersji 8.
Jak zgłaszać błędy?
Z przewodnika pomocy dowiesz się, jak uzyskać pomoc w programowaniu w usłudze Stack Overflow, przeszukać istniejące raporty problemów, zgłosić nowe błędy i poprosić o nowe funkcje.