Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase部署失败,因为找不到节点模块内部的javascript文件_Firebase_Google Cloud Functions_Bucklescript - Fatal编程技术网

Firebase部署失败,因为找不到节点模块内部的javascript文件

Firebase部署失败,因为找不到节点模块内部的javascript文件,firebase,google-cloud-functions,bucklescript,Firebase,Google Cloud Functions,Bucklescript,我有一个使用该模块的项目(用Reasure编写,但编译为JS)。编译代码时,该模块的require语句如下所示: var-Express=require(“bs-Express/src/Express.js”) 我已经在我的函数文件夹中的package.json文件中添加了bs express依赖项,并且我已经手工验证了该文件是否存在于我的dev box中 使用命令firebase deploy时,使用该文件的任何函数的部署都会失败,并出现以下错误: Function load error: C

我有一个使用该模块的项目(用Reasure编写,但编译为JS)。编译代码时,该模块的require语句如下所示:

var-Express=require(“bs-Express/src/Express.js”)

我已经在我的
函数
文件夹中的
package.json
文件中添加了
bs express
依赖项,并且我已经手工验证了该文件是否存在于我的dev box中

使用命令
firebase deploy
时,使用该文件的任何函数的部署都会失败,并出现以下错误:

Function load error: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'bs-express/src/Express.js'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/user_code/src/Endpoints.bs.js:10:15)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
函数加载错误:无法加载index.js文件中的代码。
您是否在package.json依赖项中列出了所有必需的模块?
详细堆栈跟踪:错误:找不到模块“bs-express/src/express.js”
在Function.Module.\u解析文件名(Module.js:469:15)
在Function.Module.\u加载(Module.js:417:25)
at Module.require(Module.js:497:17)
根据需要(内部/module.js:20:19)
反对。(/user_code/src/Endpoints.bs.js:10:15)
在模块处编译(Module.js:570:32)
在Object.Module.\u extensions..js(Module.js:579:10)
在Module.load(Module.js:487:32)
在tryModuleLoad时(module.js:446:12)
在Function.Module.\u加载(Module.js:438:3)
但是,正如我之前所说,
firebase服务——在我的开发者界面上,只有函数才能正常工作

firebase--版本:3.17.4

Mac OS 10.13.3


是否有任何方法可以获取正在部署到的容器上的shell访问权限或其他内容,以便我可以查看那里的node_modules文件夹中存在的内容?

下面是发生的情况:

  • bs express在其NPM包中只包含
    .re
    文件,而不包括编译的
    js
    工件
  • firebase deploy
    在容器上安装新的
    npm
    ,它不会从开发计算机复制
    node\u modules
    文件夹
  • bsb-make world
    将编译后的资源留给
    node\u modules
    目录中的库。它不会将它们复制到
    lib
    ,即使
    bs config.json
这就是编译后的JS文件在运行时丢失的原因

可能的解决办法:

  • 在容器上运行
    bsb
    ,然后在
    postInstall
    npm钩子中编译代码。(但这不起作用,因为
    bsb
    很大,并且超过了容器的200MB数据大小限制。此外,在部署期间安装依赖项需要很长时间
  • 在部署之前向javascript代码添加一些绑定步骤(Webpack或Rollup)。目前Bucklescript编译器的工作方式与Rollup的标准()存在一些冲突,因此Webpack可能是更好的选择

这似乎是特定于bucklescript的,无论它在编译什么。我不熟悉firebase,但听起来
deploy
将安装依赖项,而不仅仅是复制
node\u模块
(这似乎也很合理)。由于BuckleScript软件包通常不附带已编译的js构件,因此在使用之前必须对其进行编译。因此,我猜您要么必须在部署的安装阶段之后对其进行编译,要么必须在部署之前对依赖项进行编译和打包。您说得对。看起来BuckleScript编译阶段离开了已编译阶段Bucklescript模块的资产位于
node\u模块
文件夹内的
node\u模块
中,这些资产在部署过程中不会被复制。