一个错误是:
"errorMessage": "Cannot find module './dist/commonjs/index.js'",
另一个错误是:
Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:469:15)
我已经看到第二个错误的其他帖子,但我已经做了他们推荐的所有内容并且仍然卡住了。他们没有提到/dist/commonjs/index.js问题。
我的Lambda函数处理程序设置为" index.handler"我的主要代码在index.js。
我在Windows上。我的zip文件(HebrewVocab.zip)看起来像这样。 node_modules文件夹似乎是完整的,如下所示: 我压缩并上传了我写的PowerShell:
Compress-Archive -Path index.js,package.json,node_modules -DestinationPath $ZipFileName
aws lambda update-function-code --function-name HebrewVocab --zip-file
fileb://HebrewVocab.zip
我的index.js以此代码开头:
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context, callback);
alexa.registerHandlers(handlers);
alexa.execute();
};
所以我似乎满足了我在类似错误的所有其他帖子上阅读的所有要求。我之前有一个HelloWorld项目,但它没有使用alexa-sdk。
我也做了#34; npm install npm"正如Stackoverflow上的一个人建议的那样?这有必要吗?
当我"测试"在Lamba中,与使用Alexa语音测试相比,我看到了细节:
"errorMessage": "Cannot find module './dist/commonjs/index.js'",
./dist/commonjs应该是标准路径前缀吗?我甚至导出了"功能"到我的硬盘(作为.zip),它正是我上传的内容,并且.zip文件的根目录中肯定有一个index.js。
作为一个疯狂的猜测,我发现commonjs是一个包,所以我做了一个" npm install commonjs --save",重新压缩并重新上传,但结果相同。
我后来发现有一个带有index.js的/ node_modules / i18next / dist / commonjs,但不确定它是否相关。我甚至尝试将dist / commonjs复制到我的root和node_modules下,但仍然是同样的错误。
当我在本地运行时运行正常:
lambda-local -l index.js -h handler -e eventHelloWorld.json
最后但并非最不重要的是,我的package.json看起来像这样:
{
"name": "HebrewVocab",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"alexa-sdk": "^1.0.18",
"commonjs": "0.0.1",
"npm": "^5.5.1"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
我还能尝试什么?我在亚马逊支持论坛上发帖,但没有答案,所以我的项目一直停滞不前,直到我弄明白这一点。
2009年11月11日更新:
好的,我刚做了一个疯狂的观察。上面的Powershell创建的.zip创建了一个不同的大小.zip而不是Windows右键单击,"发送到"压缩文件夹。如果我使用Total Command" Synchronize Directories"比较两个拉链,则所有文件和结构的内容都相同。然而,从手动Windows zip创建的那个工作,并且由Powershell创建的那个提供了最初在该线程中报告的错误。 由Powershell创建的那个略小于5,019,123对比5,032,770。我尝试了一些其他的PowerShell压缩选项,但是他们创建了更大的文件(关闭它会产生大约30 MB的文件)。
我进入了暮光之城 - 任何想法?
答案 0 :(得分:2)
对于Windows,我最终使用7-zip如下(在Powershell文件中,所以$ ZipFileName是在前一行定义的变量)。
& "c:\Program Files\7-Zip\7z.exe" a -r $ZipFileName index.js package.json client_secret.json GoogleCalendarAPI.js node_modules .credentials calendar-nodejs-quickstart.json
答案 1 :(得分:1)
我遇到了同样的问题,使用PowerShell脚本来压缩和上传由Alexa技能调用的lambda函数的代码。根据PowerShell github repo中的issue #2140,Compress-Archive
生成与OS X不兼容的档案,我怀疑任何Unix派生的操作系统。
我最后使用bash -c 'zip -r filename *'
提到here因为我已经安装了windows子系统。我最初尝试Compress-7Zip
(也提到过),但它非常缓慢,以至于我认为它在我尝试过的前几次挂了。
答案 2 :(得分:0)
你可以像这样拉上旧学校的方式:
function ZipFiles( $zipfilename, $sourcedir )
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
$zipfilename, $compressionLevel, $false)
}
$zipdest = (Get-Item .\ | Select-Object -ExpandProperty FullName) + '\lambda.zip'
$zippath = (Get-Item .\lambda | Select-Object -ExpandProperty FullName)
ZipFiles $zipdest $zippath