Использование 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

Скриншот errorMessage: Введите описание изображения здесь

И последнее, но не менее важное-мой пакет.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 3

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