serverless-webpack
serverless-webpack copied to clipboard
Serverless-webpack dependency error: @babel/runtime.
This is a (Bug Report)
Description
I'm upgrading my Next.js app which runs on AWS Lambda using serverless-offline and serverless-webpack plugins. The upgrade from Next 5 to Next 8 forces me to upgrade my babel/webpack dependencies, but it's very hard to get it right.
Currently, my frontend app (:3001) works alright (just next alone), but my serverless-offline app fails to start due to transpilation issues (AFAICT).
Here are the logs when I try to run serverless package
Built at: 2019-07-06 15:51:37
Asset Size Chunks Chunk Names
.next/BUILD_ID 21 bytes [emitted]
.next/build-manifest.json 1.89 KiB [emitted]
.next/cache/next-minifier/a1584614574 83 KiB [emitted]
.next/cache/next-minifier/a2254995351 43.6 KiB [emitted]
.next/cache/next-minifier/a2670132923 1.08 KiB [emitted]
.next/cache/next-minifier/a313086635 263 KiB [emitted]
.next/cache/next-minifier/a3262333633 258 KiB [emitted]
.next/cache/next-minifier/a3683707078 1.48 KiB [emitted]
.next/cache/next-minifier/a3765160059 119 KiB [emitted]
.next/cache/next-minifier/a3982953774 118 KiB [emitted]
.next/cache/next-minifier/a4133317083 249 bytes [emitted]
.next/cache/next-minifier/a47366173 679 KiB [emitted]
.next/cache/next-minifier/a48340472 2.5 KiB [emitted]
.next/cache/next-minifier/a506587114 17.8 KiB [emitted]
.next/react-loadable-manifest.json 2 bytes [emitted]
.next/records.json 308 bytes [emitted]
.next/server/pages-manifest.json 687 bytes [emitted]
.next/server/records.json 790 bytes [emitted]
.next/server/ssr-module-cache.js 100 bytes [emitted]
.next/server/static/development/pages/_app.js 26.8 KiB [emitted]
.next/server/static/development/pages/_app.js.map 18.7 KiB [emitted]
.next/server/static/development/pages/_document.js 94 KiB [emitted]
.next/server/static/development/pages/_document.js.map 75.3 KiB [emitted]
.next/server/static/development/pages/_error.js 22.3 KiB [emitted]
.next/server/static/development/pages/_error.js.map 15.3 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/_app.js 16 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/_document.js 70.1 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/_error.js 13.3 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/console.js 252 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/error.js 16 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/index.js 207 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/school.js 217 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/chatbot-iframe.js 277 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/chatbot.js 276 KiB [emitted]
.next/server/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/simulator.js 247 KiB [emitted]
.next/static/chunks/0.js 424 bytes [emitted]
.next/static/chunks/0.js.map 99 bytes [emitted]
.next/static/chunks/commons.6af4d4fafac23e953b92.js 661 KiB [emitted]
.next/static/development/dll/dll_54b53418450dd7c1a515.js 912 KiB [emitted]
.next/static/development/pages/_app.js 357 KiB [emitted]
.next/static/development/pages/_app.js.map 280 KiB [emitted]
.next/static/development/pages/_error.js 188 KiB [emitted]
.next/static/development/pages/_error.js.map 105 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/_app.js 2.43 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/_error.js 224 bytes [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/console.js 257 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/error.js 1.03 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/index.js 80.4 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/school.js 42.5 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/chatbot-iframe.js 116 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/chatbot.js 115 KiB [emitted]
.next/static/hg9g5Anw5eSkKDY-GZt1K/pages/school/simulator.js 250 KiB [emitted]
.next/static/runtime/amp.js 145 KiB [emitted]
.next/static/runtime/amp.js.map 104 KiB [emitted]
.next/static/runtime/main-f01426cd49f054fbbbde.js 17.4 KiB [emitted]
.next/static/runtime/main.js 813 KiB [emitted]
.next/static/runtime/main.js.map 745 KiB [emitted]
.next/static/runtime/webpack-a79426b5e11f0ba5879d.js 1.46 KiB [emitted]
.next/static/runtime/webpack.js 33.8 KiB [emitted]
.next/static/runtime/webpack.js.map 35.1 KiB [emitted]
credentials/staging.demo-dialogflow-students-solutions-credentials.json 2.33 KiB [emitted]
src/functions/server/server.js 70.8 KiB 0 [emitted] src/functions/server/server
src/functions/server/server.js.map 210 KiB 0 [emitted] src/functions/server/server
Entrypoint src/functions/server/server = src/functions/server/server.js src/functions/server/server.js.map
[1] external "lodash.get" 42 bytes {0} [built]
[3] external "lodash.map" 42 bytes {0} [built]
[4] external "source-map-support/register" 42 bytes {0} [built]
[5] external "@babel/runtime-corejs2/core-js/json/stringify" 42 bytes {0} [built]
[6] external "@babel/runtime/regenerator" 42 bytes {0} [built]
[7] external "@unly/utils-simple-logger" 42 bytes {0} [built]
[8] ./src/constants.js 1.6 KiB {0} [built]
[10] external "@babel/runtime-corejs2/helpers/esm/asyncToGenerator" 42 bytes {0} [built]
[15] external "raven" 42 bytes {0} [built]
[37] external "aws-serverless-express" 42 bytes {0} [built]
[45] external "serverless-sentry-lib" 42 bytes {0} [built]
[74] multi ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js ./src/functions/server/server.js 40 bytes {0} [built]
[75] ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js 166 bytes {0} [built]
[76] ./src/functions/server/server.js 723 bytes {0} [built]
[77] ./src/functions/server/app.js 13 KiB {0} [built]
+ 64 hidden modules
WARNING in ./src/functions/dialogflow/OAuthProxy.js 88:25-53
"export 'jsonToStructProto' (imported as 'structjson') was not found in './structjson'
@ ./src/functions/server/app.js
@ ./src/functions/server/server.js
@ multi ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js ./src/functions/server/server.js
WARNING in ./src/functions/server/app.js 31:23-42
"export 'publicRuntimeConfig' was not found in '../../../next.runtimeConfig'
@ ./src/functions/server/server.js
@ multi ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js ./src/functions/server/server.js
WARNING in ./src/functions/server/app.js 30:23-42
"export 'serverRuntimeConfig' was not found in '../../../next.runtimeConfig'
@ ./src/functions/server/server.js
@ multi ./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js ./src/functions/server/server.js
Serverless: Invoke webpack:package
Serverless: WARNING: Could not determine version of module @babel/runtime-corejs2
Serverless: WARNING: Could not determine version of module @babel/runtime-corejs2
Serverless: ERROR: Runtime dependency '@babel/runtime' found in devDependencies. Move it to dependencies or use forceExclude to explicitly exclude it.
Serverless Error ---------------------------------------
Serverless-webpack dependency error: @babel/runtime.
Stack Trace --------------------------------------------
ServerlessError: Serverless-webpack dependency error: @babel/runtime.
at _.forEach.module (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-webpack/lib/packExternalModules.js:115:17)
at arrayEach (/Users/vadorequest/dev/loan-advisor/node_modules/lodash/lodash.js:516:11)
at Function.forEach (/Users/vadorequest/dev/loan-advisor/node_modules/lodash/lodash.js:9344:14)
at ServerlessWebpack.getProdModules (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-webpack/lib/packExternalModules.js:75:5)
at _.uniq._.flatMap.compileStats (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-webpack/lib/packExternalModules.js:242:37)
at arrayMap (/Users/vadorequest/dev/loan-advisor/node_modules/lodash/lodash.js:639:23)
at map (/Users/vadorequest/dev/loan-advisor/node_modules/lodash/lodash.js:9556:14)
at Function.flatMap (/Users/vadorequest/dev/loan-advisor/node_modules/lodash/lodash.js:9259:26)
at packager.getProdDependencies.then.dependencyGraph (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-webpack/lib/packExternalModules.js:237:47)
From previous event:
at PluginManager.invoke (/Users/vadorequest/dev/loan-advisor/node_modules/serverless/lib/classes/PluginManager.js:408:22)
at PluginManager.spawn (/Users/vadorequest/dev/loan-advisor/node_modules/serverless/lib/classes/PluginManager.js:426:17)
at ServerlessWebpack.BbPromise.bind.then.then.then (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-webpack/index.js:102:51)
at runCallback (timers.js:810:20)
at tryOnImmediate (timers.js:768:5)
at processImmediate [as _immediateCallback] (timers.js:745:5)
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
OS: darwin
Node Version: 8.12.0
Serverless Version: 1.40.0
Additional Data
Webpack Version: 4.35.2
Babel Core Version: "@babel/core": "7.5.0"
Babel Loader Version: "babel-loader": "8.0.6"
Please tell us about your environment: OSX 10.x
Current behavior: Compilation fails at runtime
Here are my scripts for starting my app locally:
"start": "yarn sls:dotenv && cross-env-shell 'concurrently -p '{name}' -n 'client,server' -c 'gray.bgWhite,yellow.bgBlue' \"yarn start:client\" \"yarn start:server\"'",
"start:client": "NODE_ENV=development GROUP_NAME=${GROUP_NAME:-demo}; GROUP_NAME=$GROUP_NAME next -p 3001",
"start:server": "NODE_ENV=development GROUP_NAME=${GROUP_NAME:-demo}; GROUP_NAME=$GROUP_NAME serverless offline start --dontPrintOutput",
The clients runs successfully, but the server crashes.
When I start my app using yarn start
, here are the logs:
{
"errorMessage": "Error while loading server",
"errorType": "SyntaxError",
"stackTrace": [
"/Users/vadorequest/dev/loan-advisor/node_modules/@babel/runtime-corejs2/helpers/esm/asyncToGenerator.js:1",
"(function (exports, require, module, __filename, __dirname) { import _Promise from \"../../core-js/promise\";",
"^^^^^^",
"",
"SyntaxError: Unexpected token import",
"at createScript (vm.js:80:10)",
"at Object.runInThisContext (vm.js:139:10)",
"at Module._compile (module.js:616:28)",
"at Object.Module._extensions..js (module.js:663:10)",
"at Module.load (module.js:565:32)",
"at tryModuleLoad (module.js:505:12)",
"at Function.Module._load (module.js:497:3)",
"at Module.require (module.js:596:17)",
"at require (internal/module.js:11:18)",
"at Object.<anonymous> (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:3074)",
"at n (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:220)",
"at Module.<anonymous> (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:67842)",
"at Module.<anonymous> (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:72269)",
"at n (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:220)",
"at Module.<anonymous> (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:67459)",
"at n (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:220)",
"at Object.SENTRY_RELEASE.id (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:67121)",
"at n (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:220)",
"at /Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:1019",
"at Object.<anonymous> (/Users/vadorequest/dev/loan-advisor/.webpack/service/src/functions/server/server.js:1:1029)",
"at Module._compile (module.js:652:30)",
"at Object.Module._extensions..js (module.js:663:10)",
"at Module.load (module.js:565:32)",
"at tryModuleLoad (module.js:505:12)",
"at Function.Module._load (module.js:497:3)",
"at Module.require (module.js:596:17)",
"at require (internal/module.js:11:18)",
"at Object.createHandler (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-offline/src/functionHelper.js:192:17)",
"at handler (/Users/vadorequest/dev/loan-advisor/node_modules/serverless-offline/src/index.js:609:40)",
"at Object.internals.handler (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/handler.js:101:51)",
"at request._protect.run (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/handler.js:32:23)",
"at module.exports.internals.Protect.internals.Protect.run (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/protect.js:60:12)",
"at exports.execute (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/handler.js:26:22)",
"at each (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:401:16)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at module.exports.internals.Auth.internals.Auth._authenticate (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/auth.js:222:16)",
"at internals.Auth.authenticate (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/auth.js:197:17)",
"at each (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:401:16)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at request.connection.states.parse (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/route.js:314:20)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:250:16)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:31:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at done (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:28:25)",
"at Items.serial (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:190:20)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at Object.exports.serial (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:39:9)",
"at exports.Definitions.internals.Definitions.internals.Definitions.parse (/Users/vadorequest/dev/loan-advisor/node_modules/statehood/lib/index.js:164:11)",
"at internals.state (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/route.js:295:31)",
"at each (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:401:16)",
"at iterate (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:36:13)",
"at Object.exports.serial (/Users/vadorequest/dev/loan-advisor/node_modules/items/lib/index.js:39:9)",
"at internals.Request._lifecycle (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:404:18)",
"at internals.Request._match (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:381:17)",
"at internals.Request._execute (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/request.js:335:21)",
"at Domain.request._protect.enter (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/connection.js:275:25)",
"at Domain.run (domain.js:242:14)",
"at module.exports.internals.Protect.internals.Protect.enter (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/protect.js:76:17)",
"at Server.<anonymous> (/Users/vadorequest/dev/loan-advisor/node_modules/hapi/lib/connection.js:273:30)",
"at emitTwo (events.js:126:13)",
"at Server.emit (events.js:214:7)",
"at parserOnIncoming (_http_server.js:619:12)"
]
}
.babelrc
{
"plugins": [
"source-map-support"
],
"presets": [
[
"next/babel",
{
"styled-jsx": {
"optimizeForSpeed": true,
"vendorPrefixes": true,
"sourceMaps": true,
"plugins": [
"styled-jsx-plugin-sass"
]
}
}
]
]
}
webpack.config.js
module.exports = {
entry: slsw.lib.entries,
target: 'node',
mode: process.env.NODE_ENV === 'development' ? 'development' : 'production',
// Necessary for __dirname and __filename to work correctly when bundling with Webpack for the dev environment.
// XXX See https://github.com/webpack/webpack/issues/1599
node: {
__dirname: true,
__filename: true,
// fs: 'empty',
// module: "empty",
},
plugins,
// Generate sourcemaps for proper error messages
devtool: 'source-map',
// We use webpack-node-externals to excludes all node deps. (like aws-sdk)
// You can manually set the externals too.
externals: [nodeExternals()],
// Run babel on all .js files and skip those in node_modules
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: __dirname,
exclude: /node_modules/,
},
],
},
};
Dependencies:
"devDependencies": {
"@babel/core": "7.5.0",
"babel-loader": "8.0.6",
"babel-plugin-source-map-support": "2.0.1",
"copy-webpack-plugin": "4.4.2",
"serverless": "1.40.0",
"serverless-offline": "5.6.1",
"serverless-webpack": "5.3.1",
"webpack": "4.35.2",
"webpack-bundle-analyzer": "2.11.1",
"webpack-node-externals": "1.7.2"
},
"dependencies": {
"@babel/runtime": "7.5.1",
"source-map-support": "0.5.3",
"styled-jsx": "3.2.1",
"styled-jsx-plugin-sass": "1.0.0",
}
Hi @Vadorequest, thanks for the report 👍
It seems, that you need a missing babel transform in your babel.rc to get rid of "SyntaxError: Unexpected token import"
Additionally, @babel/runtime
might be needed as dependency.
Could you try that?
Thanks for the feedback @HyperBrain , I don't really understand what I should change in my .babelrc though. (is it a missing plugin?)
As for @babel/runtime, I moved it from devDepencencies to dependencies in package.json, thanks for the hint!
I've removed a few things from package.json as specified in https://github.com/zeit/next.js#customizing-babel-config
- @babel/plugin-transform-runtime (also removed from .babelrc)
- @babel/preset-env
- @babel/preset-react
But still the same error.