在 Google App Script 中使用导入的模块

新手上路,请多包涵

我正在尝试在 Google App Script 中使用 字符串相似性,但是我并不完全清楚如何让它在 App Script 中工作,我收到多个错误,例如未定义“require”,另一个注意,模块本身似乎有依赖性。

我的最终目标是使用此脚本来匹配 App Script 中一个字符串充满拼写错误的数组与一个字符串正确的数组之间的字符串分数。这是我失败的代码。

 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]);   }    }

原文由 Alejandro Jurado 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 905
2 个回答

您的 GAS 项目不是 Node.js 应用程序,因此以上内容将不起作用。虽然 Google Apps Script 和 Node 都使用 JavaScript,但它们提供不同的运行时环境来执行 JS 代码。在 GAS 中,环境是 Google 服务器上的一个封闭生态系统,最终用户对此一无所知。

在 Node 中,运行时由 V8(JS 引擎)和公开低级 API(访问文件系统等)的 C++ 附加组件组成。您引用的库是为 Node.js 创建的 NPM 包。通过 NPM 安装包将使其可用于 Node 项目,但不要认为它也会神奇地出现在 Google 服务器上。

您必须使用这些依赖项的 GAS 特定版本,或者,如果它们不存在,则重构源代码以使其与 GAS 兼容(Node 和 GAS 使用不同的 ECMAScript 版本,因此箭头函数等一些最新功能会破坏您的气体代码)。

例如,这里是 GAS 的 lodash https://github.com/contributorpw/lodashgs

在 GAS 中使用库 https://developers.google.com/apps-script/guides/libraries

PS 在 GAS 中,所有“.gs”文件共享相同的命名空间,因此调用“require”函数是多余的。如果您想模仿这种行为,您仍然需要编写自己的 require 函数。

原文由 Anton Dementiev 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在本文中写了一些关于打包 npm 模块以在 Apps 脚本中使用的 指南

tl;dr 是创建一个 index.js 在新目录中包含以下内容:

 import {compareTwoStrings, findBestMatch} from 'string-similarity';
export {compareTwoStrings, findBestMatch};

然后在该目录中运行以下命令:

 npm init -y
npm install --save-dev string-similarity
npx esbuild index.js --bundle --global-name=stringSimilarity --outfile=StringSimilarity.js

然后,您可以将 StringSimiliarity.js 的内容复制到 Apps 脚本编辑器中的新 .gs 文件中。导出的函数将可从您自己的 Code.gs 用作 stringSimilarity. compareTwoStrings()stringSimilarity.findBestMatch()

(如果您不想自己捆绑它, esbuild 过程的输出 string-similarity 可以在 这个要点 中找到。但是一般步骤应该适用于大多数 npm 不需要 Node 或特定于浏览器的运行时环境的模块。)

原文由 Jeff Posnick 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题