我已经将husky
作为prepare
脚本安装在我的npm项目中,如下所示
{
"name": "functions",
"scripts": {
"build": "tsc",
"start": "npm run serve",
"deploy": "firebase deploy --only functions",
"prepare": "husky install functions/.husky"
}
"dependencies": {
"firebase-admin": "^11.4.1",
"firebase-functions": "^4.1.1",
},
"devDependencies": {
"husky": "^8.0.2",
"typescript": "^4.9.4"
}
}
husky
被声明为devDependencies
,因为此npm模块仅在本地开发时需要,在运行时应用程序中不需要。
因此,当我运行npm run deploy
时,我得到以下错误
i functions: updating Node.js 16 function funName(us-central1)...
Build failed:
> prepare
> husky install functions/.husky
sh: 1: husky: not found
npm ERR! code 127
npm ERR! path /workspace
npm ERR! command failed
npm ERR! command sh -c -- husky install functions/.husky
此错误明确指出未安装husky
。
一种可能的解决方案是创建一个prepare.js
脚本,用于检查脚本是在本地开发中运行还是在firebase服务器中运行(以准备项目),然后有条件地运行husky
npm模块命令
2条答案
按热度按时间knpiaxh11#
我刚刚遇到了这个完全相同的问题,但是使用
tsc
时,我不知道为什么,但是prepare
脚本也在cloud函数中运行(不仅仅是本地)。但是,考虑到您 * 很可能 * 在firebase.json的functions.ignore
列表中有node_modules
目录,node_modules目录不会作为部署的一部分上传,因此当脚本在云函数环境中运行时,husky
包对脚本不可见。您可能不需要在函数环境中运行husky脚本,因此可以添加一个条件来检查通常在函数环境中设置的环境变量(在我的例子中,我使用的是
GOOGLE_FUNCTION_TARGET
环境变量),并且只有在没有设置环境的情况下才运行该命令。您还需要将其 Package 在bash脚本中,而不是将其内联添加到包中。json,因为准备脚本是如何运行的。例如,下面是我的
scripts/prepare.sh
文件的内容。然后我在我的package.json准备脚本中使用它:
有一个潜在的更好的解决方案,但这是我如何得到它为我工作。希望这有助于!
ljsrvy3e2#
This SO的答案非常正确,并且使用了bash脚本,我使用答案中提到的相同概念在js中编写了名为
prepare.mjs
的scripts/
文件夹中的prepare脚本在我的
package.json
中,我使用了上述脚本,如下所示这使用了Google文档中记录的环境变量(
GOOGLE_FUNCTION_TARGET
)