Firebase部署失败,因为找不到节点模块内部的javascript文件
我有一个使用该模块的项目(用Reasure编写,但编译为JS)。编译代码时,该模块的require语句如下所示: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
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模块
中,这些资产在部署过程中不会被复制。