无法在NodeJS应用中将Google Apps脚本“ clasp”作为子进程运行

问题描述

我正在尝试构建一个小的测试框架,该框架在我的Google Apps脚本上运行功能,这些功能将作为API发布在我的Google Cloud Project上。

我可以使用在全球安装了the clasp npm module的标准终端成功运行测试。因此,我已经完成所有权限设置,并且clasp cli工具已“登录”,并且工作正常。

现在,我想在NodeJS脚本中使用clasp编写一些自动化测试。我认为我可以简单地使用Node的child_process模块来做到这一点。

这是我用来使用安装为全局npm模块的clasp cli工具生成新进程的功能

clasp.spawn = (args) => {

    log.info("\n\tSpawning new GAS test...\n\n");
    log.info("\n\tUsing the Current Working Directory...\%o",process.cwd());
    log.info("\n\tUsing the process environment...\n%o",process.env);

    const test = spawn('clasp',['run',"querySheet",("'" + (JSON.stringify(args)) + "'") ],{
                              cwd      : process.cwd(),env      : process.env,stdio    : ['inherit','inherit','pipe'],encoding : 'utf-8'
                     })
    
    test.on('error',(err) => {
        console.log(err);
    })

    test.on('data',(data) => {
        console.log(data);
    });

    test.on('exit',(code) => {log.info("Exited with code [" + code + "]")})

}

运行此命令时,遇到关于找不到某些依赖项的错误。具体来说,错误指向某个名为encoding的软件包。该错误显示为:

Exception has occurred: Error: Cannot find module 'encoding'
Require stack:
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/node-fetch/lib/index.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/gaxios/build/src/gaxios.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/gaxios/build/src/index.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/gcp-Metadata/build/src/index.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/google-auth-library/build/src/auth/googleauth.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/google-auth-library/build/src/index.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/src/auth.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/src/commands/apis.js
- /Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/src/index.js
  at Function.Module._resolveFilename (internal/modules/cjs/loader.js:797:15)
    at Function.Module._load (internal/modules/cjs/loader.js:690:27)
    at Module.require (internal/modules/cjs/loader.js:852:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/Users/name/.nvm/versions/node/v12.13.1/lib/node_modules/@google/clasp/node_modules/node-fetch/lib/index.js:162:12)
    at Module._compile (internal/modules/cjs/loader.js:959:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10)
    at Module.load (internal/modules/cjs/loader.js:815:32)
    at Function.Module._load (internal/modules/cjs/loader.js:727:14)
    at Module.require (internal/modules/cjs/loader.js:852:19)

因此,我已经检查了$ PATH变量,并且好像$ vm中包含了nvm的/bin文件夹-这是clasp全局安装的位置。

有人知道是否有可能生成一个全局安装的npm模块,该模块本质上是一个cli工具作为子进程?我找到了this question that asks something similar,但是该解决方案似乎无效。作者建议在shell : '/bin/zsh'的options参数中使用spawn键/值,但这似乎不起作用。

肯定感觉到该问题与某些环境配置有关,但是$ PATH再次检出包含全局安装的clasp模块的位置。

感谢您的帮助!谢谢您的时间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)