Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在transpiled Apps脚本中导入矩.js_Typescript_Google Apps Script_Clasp - Fatal编程技术网

Typescript 在transpiled Apps脚本中导入矩.js

Typescript 在transpiled Apps脚本中导入矩.js,typescript,google-apps-script,clasp,Typescript,Google Apps Script,Clasp,我有必要在本地开发的应用程序脚本项目中使用矩.js,该项目用于从TypeScript转换 我已经尝试过在项目中添加js库,就像我在.gs中正常编写时那样,但是使用clasp似乎不允许我使用这种方式 正如我在其他堆栈溢出答案中读到的那样,我已经尝试过像这样使用eval,但没有成功: eval(UrlFetchApp.fetch('library.min.js url').getContentText()); 在所有情况下,当我按下应用程序脚本并在应用程序脚本编辑器中运行该函数后,我收到 Refe

我有必要在本地开发的应用程序脚本项目中使用矩.js,该项目用于从TypeScript转换

我已经尝试过在项目中添加js库,就像我在.gs中正常编写时那样,但是使用clasp似乎不允许我使用这种方式

正如我在其他堆栈溢出答案中读到的那样,我已经尝试过像这样使用eval,但没有成功:

eval(UrlFetchApp.fetch('library.min.js url').getContentText());
在所有情况下,当我按下应用程序脚本并在应用程序脚本编辑器中运行该函数后,我收到

ReferenceError:未定义力矩。第6行,文件测试

我的TS文件:

在标准应用程序脚本项目中,可以通过eval和UrlFetchApp使用外部库,如矩.js,因为变量导出和模块没有定义,所以库

事实上,我们可以通过在应用程序脚本编辑器中检查这一点来验证结果:

代码.gs 执行主要收益

对于transpiled TypeScript,由于导出和模块是全局定义的,因此eval'd库的初始化假定它具有比Google Apps脚本提供的更新的运行时/包管理系统

代码.ts $clasp push->

代码.gs 这就产生了一个

this['moment']: undefined
this.module: [object Object]
this.module[exports]: 
function e() {
    return Qe.apply(null, arguments);
}
解决 因此,eval是成功的,但绑定到module.exports,而不是瞬间。您可以在transpiled Apps脚本中参考module.exports,而不是moment:

可能您需要使用与clasp不同的方法,因为1.6.0版的ts2gas似乎不支持。在transpiled TS中观察到的module.exports是eval'd import的行为看起来异常脆弱,在编写实际的TypeScript时肯定不容易解决

相关的:


你能详细说明一下吗?代码截图就是这个问题的一个例子。这是因为问题与我编写的代码没有直接关系,您可以假设查看代码。重要的代码部分位于代码标签下,因为在此处编写代码时,规则是找不到名称“时刻”,而不是引用错误:未定义时刻。您是否正确描述了这个问题?我现在修改了这个问题,以便更清楚地说明这一步。在从TypeScript编译之后,Google脚本页面向我提供了该错误。
function e() {
    return Qe.apply(null, arguments);
}
import * as moment from "moment";

const momentURL = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment.min.js";
function main() {
    eval(UrlFetchApp.fetch(momentURL).getContentText());
    Logger.log(`this['moment']: ${this["moment"]}`);
    Logger.log(`this.module: ${this.module}`);
    for (let key in this.module)
        Logger.log(`this.module[${key}]: ${this.module[key]}`);
}
// Compiled using ts2gas 1.6.0 (TypeScript 3.2.2)
var exports = exports || {};
var module = module || { exports: exports };
//import * as moment from "moment";
var momentURL = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment.min.js";
function main() {
    eval(UrlFetchApp.fetch(momentURL).getContentText());
    Logger.log("this['moment']: " + this["moment"]);
    Logger.log("this.module: " + this.module);
    for (var key in this.module)
        Logger.log("this.module[" + key + "]: " + this.module[key]);
}
this['moment']: undefined
this.module: [object Object]
this.module[exports]: 
function e() {
    return Qe.apply(null, arguments);
}
Logger.log(module.exports().format("YYYY")); // 2019