【发布时间】:2019-02-20 20:07:43
【问题描述】:
我遵循了 serverless-stack.com 的指南,并在一个单一存储库中将我的 api 划分为多个服务。 代码使用 seed.run 部署得很好,但是当我尝试从我的 reactjs webclient 访问一些端点时,如果我的 api 出现错误。
我已尝试 console.log 记录该错误,但它并没有透露更多细节。我从 stackowerflow 的其他问题中猜想它可能与 ES6 或 babel 有关,但我不确定。
我的 .babelrc 看起来像这样:
{
"plugins": ["source-map-support", "transform-runtime"],
"presets": [
["env", { "node": "8.10" }],
"stage-3"
]
}
我在 AWS (cloudwatch) 收到以下错误:
Syntax error in module 'list': SyntaxError
(function (exports, require, module, __filename, __dirname) { import * as dynamoDbLib from "./libs/dynamodb-lib";
^^^^^^
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) .
有什么我可能缺少的想法吗?
更新:
我的 babelrc:
{
"presets": [
[
"env",
{
"targets": {
"node": "8.1"
}
}
]
]
}
我的 webpack.config.js
const nodeExternals = require("webpack-node-externals");
module.exports = {
entry: slsw.lib.entries,
target: "node",
// Generate sourcemaps for proper error messages
devtool: 'source-map',
// Since 'aws-sdk' is not compatible with webpack,
// we exclude all node dependencies
externals: [nodeExternals()],
mode: slsw.lib.webpack.isLocal ? "development" : "production",
optimization: {
// We no not want to minimize our code.
minimize: false
},
performance: {
// Turn off size warnings for entry points
hints: false
},
// Run babel on all .js files and skip those in node_modules
module: {
rules: [
{
test: /\.js$/,
loader: "babel-loader",
include: __dirname,
exclude: /node_modules/
}
]
}
};
包.json
{
"name": "api",
"version": "1.1.4",
"description": "Backend API for APP.",
"main": "handler.js",
"scripts": {
"test": "jest"
},
"devDependencies": {
"@types/node": "^10.12.18",
"body-parser": "^1.18.3",
"nodemon": "^1.18.9",
"aws-sdk": "^2.224.1",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-es2017": "^6.24.1",
"babel-plugin-source-map-support": "^1.0.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-3": "^6.24.1",
"jest": "^21.2.1",
"serverless-offline": "^3.18.0",
"serverless-webpack": "^5.1.0",
"webpack": "^4.2.0",
"webpack-node-externals": "^1.6.0"
},
"dependencies": {
"babel-runtime": "^6.26.0",
"source-map-support": "^0.4.18",
"stripe": "^5.8.0",
"uuid": "^3.2.1"
}
}
【问题讨论】:
-
尝试将
modules: "commonjs"选项传递给环境预设。这应该让您使用 ES6 模块并让它们在节点中工作。 -
嗨,你能再指导我一些吗?我在哪里设置这个,在 package.json 中?
-
喜欢这个? { "plugins": ["source-map-support", "transform-runtime"], "presets": [["env", { "node": "8.10", "modules": "commonjs"} ], “第 3 阶段”] }
标签: node.js aws-lambda aws-api-gateway serverless-framework aws-serverless