Использование Alexa SDK - "errorMessage": "не удается найти модуль"./dist / commonjs / index.js'",
Одна ошибка:
"errorMessage": "Cannot find module './dist/commonjs/index.js'",
Другая ошибка:
Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:469:15)
Я видел другие сообщения о второй ошибке, но я сделал все, что они рекомендуют, и все еще застрял. И они не упоминают индекс /dist/commonjs/.проблема js.
Мой обработчик лямбда-функции имеет значение " 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
Мой индекс.js начинается с этого кода:
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context, callback);
alexa.registerHandlers(handlers);
alexa.execute();
};
Таким образом, я, кажется, отвечаю всем требованиям, которые я прочитал на всех других сообщениях о подобной ошибке. У меня уже был проект HelloWorld, но он не использовал alexa-sdk.
Я также сделал "npm install npm", как предложил один человек на Stackoverflow? Разве это необходимо?
Когда я "тестирую" в Lamba, по сравнению с использованием Alexa voice для тестирования, я смотрите подробности:
"errorMessage": "Cannot find module './dist/commonjs/index.js'",
Должен ./dist / commonjs-стандартный префикс пути? Я даже экспортировал "функцию" на свой жесткий диск (как a .zip), и это именно то, что я загрузил), и там определенно есть индекс.js там в корне .сжатый файл.
В качестве дикой догадки я обнаружил, что commonjs-это пакет, поэтому я сделал "npm install commonjs --save", переписал и повторно загрузил, но тот же самый точный результат.
Позже я обнаружил, что есть /node_modules/i18next/dist/commonjs с индекс.js, но не уверен, связано ли это или нет. Я даже попытался скопировать этот dist / commonjs в мой корень и под node_modules, но все равно та же ошибка.
Он работает нормально, когда я запускаю локально с:
lambda-local -l index.js -h handler -e eventHelloWorld.json
И последнее, но не менее важное-мой пакет.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"
}
Что еще я могу попробовать? Я написал в форум поддержки Amazon, но ответа нет, поэтому мой проект застрял, пока я не выясню это.
обновление 11/07/2017:
Ладно, я только что сделал одно сумасшедшее наблюдение. То.zip, созданный выше Powershell, создает другой размер .zip, чем делать Windows щелкните правой кнопкой мыши," отправить в " сжатую папку. Если сравнить две молнии с помощью команды Total "синхронизировать каталоги", то все файлы и структура идентичны по содержанию. Тем не менее, один, созданный из ручного zip Windows, работает, а другой, созданный Powershell, выдает ошибку, о которой сообщалось изначально в этой теме. Тот, который создан Powershell, немного меньше 5,019,123 против 5,032,770. Я попробовал некоторые другие варианты сжатия powershell, но они создавали гораздо большие файлы (выключение его дало около 30 МБ файла). Я вошел в сумеречную зону - есть идеи? 3 ответа:
Для 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
Я столкнулся с той же проблемой, используя скрипт PowerShell для zip и загрузки кода для лямбда-функции, вызываемой навыком Alexa. Согласно выпуску #2140 в репозитории PowerShell github,
Compress-Archive
создает архивы, несовместимые с OS X, и я подозреваю, что любая Unix-производная ОС.Я в конечном итоге использовал
bash -c 'zip -r filename *'
, Как упоминалось здесь, так как у меня уже была установлена подсистема linux для windows. Я сначала попробовалCompress-7Zip
(также упоминалось), но это было очень медленно, чтобы дело в том, что я думал, что он висел в первые пару раз, когда я попробовал его.
Вы можете застегнуть молнию старым школьным способом следующим образом:
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