javascript - 无法将 nest.js 项目部署到 Google Firebase 函数
问题描述
NestJs 使用 ES6、ES7 和 ES8,但 Firebase Functions 停留在 Node v.6.11。
我尝试编写一个带有 babel 的 webpack 配置文件来将我的文件和 node_modules 转换为节点 v6.11,但由于 @nestjs/common 中的异步函数导致的语法错误,我无法完成部署/interceptors/file-fields.interceptor.js 文件。
⚠ functions[api]: Deployment error.
Function load error: Code in file dist/index.js can't be loaded.
Is there a syntax error in your code?
Detailed stack trace: /user_code/node_modules/@nestjs/common/interceptors/file-fields.interceptor.js:10
async intercept(context, call$) {
^^^^^^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/user_code/node_modules/@nestjs/common/interceptors/index.js:6:10)
这是我的 webpack.config.js 文件:
'use strict';
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: './src/server.ts',
output: {
filename: 'index.js',
libraryTarget: 'this'
},
target: 'node',
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
"targets": {
"node": "6.11.1"
}
},
'@babel/stage-0'
]
],
plugins: [require('@babel/plugin-transform-async-to-generator')]
}
},
{
loader: 'ts-loader',
options: {
transpileOnly: true
}
}
]
},
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
"targets": {
"node": "6.11.1"
}
},
'@babel/stage-0'
]
],
plugins: [require('@babel/plugin-transform-async-to-generator')]
}
}
]
}
]
},
resolve: {
extensions: [ '.ts', '.tsx', '.js' ]
},
externals: [nodeExternals()]
};
我的 tsconfig.json:
{
"compilerOptions": {
"lib": ["es6", "es2015.promise"],
"module": "commonjs",
"noImplicitAny": false,
"outDir": "",
"sourceMap": true,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowJs": true,
"target": "es6",
"typeRoots": [
"node_modules/@types"
]
},
"include": [
"src/**/*.ts",
"spec/**/*.ts"
],
"exclude": [
"**/*.spec.ts"
]
}
怎么了?
解决方案
就在 3 天前(在 Google Cloud 的 Next conf 之后)Google 刚刚宣布了新的 Node 8 运行时和 Firebase Cloud Functions 2.0.0 和 Firebase 工具到 4.0.0。
以下是搭乘 Node 8 列车所需要做的事情:
- 升级
firebase-functions version
到 2.0.0 - 升级
firebase-tools
到 4.0.0 - 添加“引擎”:
{ “node": “8” }
到您的/functions/package.json
更多细节: https ://firebase.google.com/docs/functions/manage-functions#set_nodejs_version
推荐阅读
- reactjs - 从函数中的json返回数据
- javascript - 通过单击 Button 元素检查 CheckBox
- java - MongoTemplate AnnotationBasedPersistentProperty.isWritable 并发问题
- swift - Alamofire + 结合 publishDecodable 到 Future
- node.js - 在 MongoDB / NodeJS 上创建文档之前检查是否已经存在字段
- php - 避免其他用户,除了财产所有者访问 laravel 中的某些特定 url
- haskell - Haskell 多态类型
- c# - 如何使用 asp.net mvc 在视图中创建复选框列表?
- eclipse - PyDev 安装问题。(PyDev/Eclipse)
- api - 通过 Shopify API 对客户进行静默身份验证