Javascript 在Google应用程序脚本中使用导入的模块

Javascript 在Google应用程序脚本中使用导入的模块,javascript,algorithm,google-apps-script,Javascript,Algorithm,Google Apps Script,我试图在Google应用程序脚本中使用,但是我并不完全清楚如何在应用程序脚本中工作,我遇到了多个错误,例如“require”没有定义,另一个注意事项是,模块本身似乎有依赖关系 我的最终目标是使用这个脚本在一个数组和一个数组之间匹配字符串分数,其中一个数组中的字符串全是拼写错误,另一个数组中的字符串都是正确的。这是我失败的代码 function matchEmails() { var doc = SpreadsheetApp.openById(("ID")); var ts = do

我试图在Google应用程序脚本中使用,但是我并不完全清楚如何在应用程序脚本中工作,我遇到了多个错误,例如“require”没有定义,另一个注意事项是,模块本身似乎有依赖关系

我的最终目标是使用这个脚本在一个数组和一个数组之间匹配字符串分数,其中一个数组中的字符串全是拼写错误,另一个数组中的字符串都是正确的。这是我失败的代码

function matchEmails() {   var doc =
 SpreadsheetApp.openById(("ID"));

   var ts = doc.getSheetByName("dir");   var source =
 doc.getSheetByName("data");   var names =
 source.getDataRange().getValues();   var data =
 ts.getDataRange().getValues();   var arr = [];   var arr2 = [];   var
 arr3 = [];   var arr4 = [];
      for (i=0; i<names.length; i++) {

     for (j=0; j<data.length; j++) {

           stringSimilarity.compareTwoStrings(names[i][0], data[j][0]);   Logger.log(stringSimilarity);




       /*
       var n = data[j][0].split();
       for (N=0; N<n.length; N++) {
       arr2.push(n[N].charAt(0));
       }
       var string2 = arr2.join("");
       var arr2 = [];

       if (names[i][0] === data[j][0]) {

       arr.push([data[j][1]]);

       }      */ //I want to replace this blanked out code with String >similarity.      

       if (string === string2) {

         arr.push([data[j][1]]);
         arr3.push([i+1]);
         arr4.push([data[j][0]]);


       }
     }   }   for (i = 0; i<arr.length; i++) {
     source.getRange(arr3[i],6).setValue(arr[i]);
     source.getRange(arr3[i],7).setValue(arr4[i]);   }    }
函数matchEmails(){var doc=
电子表格应用程序openById((“ID”);
var ts=doc.getSheetByName(“dir”);变量源=
doc.getSheetByName(“数据”);变量名称=
source.getDataRange().getValues();变量数据=
ts.getDataRange().getValues();var arr=[];var arr2=[];var
arr3=[];var arr4=[];

对于(i=0;i您的GAS项目不是Node.js应用程序,因此上述内容不起作用。虽然Google应用程序脚本和Node都使用JavaScript,但它们为执行js代码提供了不同的运行时环境。在GAS中,环境是Google服务器上的封闭生态系统,最终用户对此一无所知

节点中,运行时由V8(JS引擎)和C++附加组件组成,它们公开低级API(访问文件系统等)。所引用的库是NoDE.js创建的NPM包。通过NPM安装包将使其可以用于节点项目,但不认为它也会神奇地出现在谷歌服务器上。 您必须使用这些依赖项的特定于GAS的版本,或者,如果它们不存在,则重构源代码以使其与GAS兼容(节点和GAS使用不同的ECMAScript版本,因此一些最新功能(如箭头函数)将破坏GAS代码)

例如,这里的lodash代表天然气

在GAS中使用库


另外,在GAS中,所有“.gs”文件共享同一名称空间,因此调用“require”函数是多余的。如果要模拟此行为,您仍然需要编写自己的require函数。

默认情况下,谷歌应用程序脚本文件可以访问谷歌API,例如G套件服务中的电子表格服务:

GAS项目(因此该项目中的脚本)默认情况下无权访问Node.js或任何其他框架。但是,GAS项目可以通过引用包含另一个GAS项目作为库。在GAS脚本编辑器中,使用菜单“资源”>“库…”,通过设置源项目的项目键,将外部GAS项目添加为库(和其他一些源项目属性)

因此,如果您有一个依赖于外部资源(如Node.js)的Javascript通过
require
,如果您可以找到一个使用相同API提供相同服务的外部GAS项目,您可以将其作为脚本的库提供。您可以从原始脚本中省略
require
语句,因为它们被我提到的GAS库依赖配置替换

如果您的原始脚本及其依赖项都是开源的,那么您可以为原始脚本中的每一级依赖项创建GAS项目。您已经可以找到一些流行的JS框架脚本作为GAS库提供


GAS还允许将外部资源打包为Web应用程序和其他包格式。它们可以与相应的技术一起使用,其中一些技术已经可以从其他开发人员那里获得。

谢谢Anton,我现在更清楚了。我已经放弃了重构代码的尝试,是时候继续了。