我有一个使用模块https://www.npmjs.com/package/bs-express的项目(用Reason编写,但编译为JS)。编译代码时,该模块的require语句如下所示:
var Express = require("bs-express/src/Express.js");
我确实已将bs-express
依赖项添加到package.json
文件夹中的functions
文件,并且我已通过请将文件存在于我的开发箱中。
当我使用命令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)
但是,就像我之前说的那样,我的开发者工具箱上的firebase serve --only functions
工作得很好。
firebase --version: 3.17.4
Mac OS 10.13.3
有没有办法让shell访问或部署容器上的东西,以便我可以看到node_modules文件夹中存在什么?
答案 0 :(得分:1)
以下是发生的事情:
.re
个文件,而不包括已编译的js
工件。firebase deploy
在容器上执行了新的npm install
,它不会从开发计算机复制node_modules
文件夹。bsb -make-world
为node_modules
目录内的node_modules
中的库保留已编译资产。即使在lib
in_source
,它也不会将其复制到bs-config.json
这就是编译后的JS文件在运行时丢失的原因。
可能的解决方案:
bsb
并在postInstall
npm挂钩中编译代码。 (但这不起作用,因为bsb
很大并且超出了容器的200MB的数据大小限制。在部署期间安装依赖项需要花费很多时间。