问题描述
我正在尝试构建一个小的测试框架,该框架在我的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 (将#修改为@)