node.js - 部署到 Firestore Cloud Functions - “错误:找不到模块”
问题描述
我在尝试部署功能时得到了这个:
Deployment error.
Build failed: npm ERR! code ENOLOCAL
npm ERR! Could not install from "../config/myconfig" as it does not contain a package.json file.
这是在按照官方文档的建议package.json
更新我的functions
目录之后,如下所示:
...
"dependencies": {
"sms_sender": "file:./",
"myconfig": "file:../config/myconfig",
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1"
},
...
正如 GCP 日志上的堆栈跟踪中所见,这应该可以修复此错误:
A 2020-08-27T12:43:39.026Z sendMessage Could not load the function, shutting down. sendMessage
A 2020-08-27T12:43:39.020Z sendMessage at Function.Module._load (internal/modules/cjs/loader.js:585:3) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage at tryModuleLoad (internal/modules/cjs/loader.js:593:12) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage at Module.load (internal/modules/cjs/loader.js:653:32) sendMessage
A 2020-08-27T12:43:39.020Z sendMessage at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at Module._compile (internal/modules/cjs/loader.js:778:30) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at Object.<anonymous> (/workspace/sms_sender.js:5:16) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at require (internal/modules/cjs/helpers.js:25:18) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at Module.require (internal/modules/cjs/loader.js:692:17) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at Function.Module._load (internal/modules/cjs/loader.js:562:25) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15) sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Detailed stack trace: Error: Cannot find module '../config/myconfig' sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Did you list all required modules in the package.json dependencies? sendMessage
A 2020-08-27T12:43:39.019Z sendMessage Provided module can't be loaded. sendMessage
sendMessage 是我在 index.js 中的后台函数,它导入了“sms_sender”模块:
exports.sendMessage = functions.https.onRequest(async (req, res) => {
...
// send the sendMessage
sms_sender.sendMsg("+123567890", "hello, my friend!");
...
}
sms_sender.js:
const config = require('../config/myconfig');
module.exports = {
sendMsg: async function(recipientNum, message) {
...
}
}
项目结构:
/project-root
/config
myconfig.js
/functions
index.js
sms_sender.js
package.json
/tests
...
package.json
我查看了这个相关的帖子,但它正在谈论外部依赖。
我应该如何告诉 Node/npm 'myconfig' 只是一个本地文件,而不是真正的模块本身?我尝试将存根“package.json”文件放入/config,但仍然出现相同的Could not install from "../config/myconfig" as it does not contain a package.json file.
错误
解决方案
确保从函数目录而不是项目目录安装包。它在本地工作,并在您部署它时产生错误。所以,
cd functions
npm install [your package]
它会正常工作
推荐阅读
- java - 在多个项目之间链接 maven 依赖项时出现 ClassNotFoundException
- airflow - 气流调度程序拒绝在恶魔模式下启动
- node.js - 在 mongodb 和节点 js 中堆内存不足
- javascript - Jquery检查未检查的转换不起作用
- java - 为什么 RecyclerView Adapter 是一个泛型类
- java - Vaadin 按钮单击不会立即执行
- python - 我非常坚持如何添加外卖选项,因为定义不起作用
- php - 从 java EE 通过 PHP 发送 HTML 数据而不使用 JSON 对象进行更改
- python - 如何使用 KV 语言在 Kivy 中制作自定义按钮?
- spring - 如何清理用于幂等 Spring 集成模式的元数据存储