Firebase云功能无法识别透明ES5:firebase未定义

问题描述 投票:0回答:1

一点介绍,目前(在我写这篇文章的时候)Firebase函数不支持async和await等功能来自更新版本的节点。我试图通过将我的代码转换为他们目前支持的节点版本来克服这个问题。

我正在使用webpack 3来捆绑我的react.js Web应用程序。我已经设置了两个单独的配置 - 一个用于开发和另一个生产。我使用第三个确认作为生产pipiline的第二个任务来执行cloudfunctions.js并将其吐出到部署目录functions/index.js使用babel来传输代码,

我没有在.babelrc中描述转换需求,而是使用webpack将这些细节添加到规则中模块内部的选项配置对象中。

我已经成功地发现了代码,但Firebase一直在抱怨没有定义'firebase'。我已将此错误的触发器缩小到第一行代码,这是一个导入。

任何可以指出我正确方向的建议都值得赞赏。

import functions from ''firebase-functions';

事实上,我已经尝试过Commonjs(使用require)并在ES6导入/导出方面进行了其他尝试。

的package.json:

{
  "scripts": {
  "start":"node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack/dev.config.js",
"build": "cross-env NODE_ENV=production node ./node_modules/webpack/bin/webpack.js --config webpack/prod.config.js"
  },
  "dependencies": {
    "@babel/polyfill": "^7.0.0-beta.40",
    "firebase-admin": "^5.5.1",
    "firebase-functions": "^0.7.3",
  },
  "devDependencies": {
    "@babel/cli": "^7.0.0-beta.40",
    "@babel/core": "^7.0.0-beta.40",
    "@babel/plugin-proposal-object-rest-spread": "^7.0.0-beta.40",
    "@babel/preset-env": "^7.0.0-beta.40",
    "babel-loader": "^8.0.0-beta.0",
    "babel-preset-react": "^6.24.1",
    "cross-env": "^5.1.3",
    "generate-json-webpack-plugin": "^0.2.2",
    "uglifyjs-webpack-plugin": "^1.1.8",
    "webpack": "^3.10.0",
    "webpack-merge": "^4.1.1"
  }
}

functions.config.js(webpack)

const
    path               = require('path'),
    pkg                = require('../package'),
    GenerateJsonPlugin = require('generate-json-webpack-plugin'),
    UglifyJSPlugin     = require('uglifyjs-webpack-plugin'),
    webpack            = require('webpack');

const externals = [
    'firebase-admin',
    'firebase-functions'
]

const genPackage = () => ({
    name         : 'functions',
    private      : true,
    main         : 'index.js',
    license      : 'MIT',
    dependencies : externals.reduce( (acc, name) => Object.assign({}, acc, { [name]: pkg.dependencies[name] || pkg.devDependencies[name] }), {} )
})

module.exports = {
    entry  : [
        '@babel/polyfill',
        path.join(__dirname, '../cloudfunctions.js')
    ],
    output : {
        path     : path.join(__dirname, '../functions/'),
        filename : 'index.js'
},
    module : {
        rules: [
            {
                test    : /\.js$/,
                loader  : 'babel-loader',
                options : 
                    {
                        presets : [
                            [ 
                                '@babel/env',
                                { 
                                    option : { 
                                        targets : { 
                                            node : '6.11.5'
                                        }
                                    }
                                }
                            ]                 
                        ],
                        plugins: [
                            '@babel/plugin-proposal-object-rest-spread'
                        ]   
                    }
                ,
                exclude : /node_modules/
            }
        ]
    },
    externals : externals.reduce( (acc, name) => Object.assign({}, acc, { [name]: true }), {} ),
    plugins   : [
        new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }),
        new UglifyJSPlugin(),
        new GenerateJsonPlugin('package.json', genPackage())
    ]
}

环境

  • 操作系统:Windows 10
  • 节点版本:8.9.4
  • Pkg经理:npm
  • Shell:Windows Shell
  • 浏览器和版本:Chrome 64.0.3282.186
  • 语言:Javascript

预期的行为

  1. 透明成功。
  2. 成功部署到firebase

实际行为

透明成功。点击firebase deploy --only functions命令后继续接收此日志并返回相同的错误:

i  deploying functions
i  functions: ensuring necessary APIs are enabled...
+  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...

Error: Error occurred while parsing your function triggers.

ReferenceError: firebase is not defined
at Object.module.exports (C:\Users\Andrew Redican\Compass\functions\index.js:9040:18)
at __webpack_require__ (C:\Users\Andrew Redican\Compass\functions\index.js:20:30)
at Object.module.exports (C:\Users\Andrew Redican\Compass\functions\index.js:8967:17)
at __webpack_require__ (C:\Users\Andrew Redican\Compass\functions\index.js:20:30)
at Object.<anonymous> (C:\Users\Andrew Redican\Compass\functions\index.js:3687:18)
at __webpack_require__ (C:\Users\Andrew Redican\Compass\functions\index.js:20:30)
at C:\Users\Andrew Redican\Compass\functions\index.js:63:18
at Object.<anonymous> (C:\Users\Andrew Redican\Compass\functions\index.js:66:10)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)

cloundFunctions.js [输入]

let functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

functions / index.js [输出]

  1. 根据我是否包含Uglify插件,输出将缩小或正常。
  2. Webpack还接收@ babel / polyfill,因此将帮助功能添加到此文件中。

我没有包含outfile,因为unmifinify版本是9049行代码长,而minified不是legibile。

我试过了

  1. 使用Babel 6然后使用Babel 7仍然没有用。
  2. 环境配置qazxsw poi
  3. 我已经尝试直接提供硬编码的访问对象。

我显然遗漏了一些东西,但我现在已经多次查看过这篇文章/回购。

其他说明

我正试图摆脱打字稿并尽可能地处理承诺的回调地狱。我也试图不直接依赖npm来直接运行命令,而是利用webpack。

javascript node.js babeljs firebase-admin webpack-3
1个回答
0
投票

我能够让webpack使用babel将代码转换为functions / index.js。我解决了这个问题。

使用webpack时,请确保将output.libraryTarget指定为“umd”。

下面是webpack配置文件:

https://firebase.google.com/docs/functions/config-en

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.