使用Alexa SDK - " errorMessage":"找不到模块' ./ dist / commonjs / index.js'",

时间:2017-11-05 16:25:21

标签: aws-lambda alexa alexa-skills-kit

一个错误是:

"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)看起来像这样。 enter image description here node_modules文件夹似乎是完整的,如下所示: enter image description here 我压缩并上传了我写的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

errorMessage的屏幕截图: enter image description here

最后但并非最不重要的是,我的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的文件)。

我进入了暮光之城 - 任何想法?

3 个答案:

答案 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 #2140Compress-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